{
  "id": "edc1420eba63121e30ad493310438dbe",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.7.1",
  "solcLongVersion": "0.7.1+commit.f4a555be",
  "input": {
    "language": "Solidity",
    "sources": {
      "src.sol/ChannelFactory.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/utils/Create2.sol\";\n\nimport \"./interfaces/IChannelFactory.sol\";\nimport \"./interfaces/IVectorChannel.sol\";\nimport \"./lib/LibAsset.sol\";\nimport \"./lib/LibERC20.sol\";\n\n/// @title ChannelFactory\n/// @author Connext <support@connext.network>\n/// @notice Creates and sets up a new channel proxy contract\ncontract ChannelFactory is IChannelFactory {\n    // Creation code constants taken from EIP1167\n    bytes private constant proxyCreationCodePrefix =\n        hex\"3d602d80600a3d3981f3_363d3d373d3d3d363d73\";\n    bytes private constant proxyCreationCodeSuffix =\n        hex\"5af43d82803e903d91602b57fd5bf3\";\n\n    bytes32 private creationCodeHash;\n    address private immutable mastercopy;\n    uint256 private immutable chainId;\n\n    /// @dev Creates a new `ChannelFactory`\n    /// @param _mastercopy the address of the `ChannelMastercopy` (channel logic)\n    /// @param _chainId the chain identifier when generating the CREATE2 salt. If zero, the chain identifier used in the proxy salt will be the result of the opcode\n    constructor(address _mastercopy, uint256 _chainId) {\n        mastercopy = _mastercopy;\n        chainId = _chainId;\n        creationCodeHash = keccak256(_getProxyCreationCode(_mastercopy));\n    }\n\n    ////////////////////////////////////////\n    // Public Methods\n\n    /// @dev Allows us to get the mastercopy that this factory will deploy channels against\n    function getMastercopy() external view override returns (address) {\n        return mastercopy;\n    }\n\n    /// @dev Allows us to get the chainId that this factory will use in the create2 salt\n    function getChainId() public view override returns (uint256 _chainId) {\n        // Hold in memory to reduce sload calls\n        uint256 chain = chainId;\n        if (chain == 0) {\n            assembly {\n                _chainId := chainid()\n            }\n        } else {\n            _chainId = chain;\n        }\n    }\n\n    /// @dev Allows us to get the chainId that this factory has stored\n    function getStoredChainId() external view override returns (uint256) {\n        return chainId;\n    }\n\n    /// @dev Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`\n    function getProxyCreationCode()\n        public\n        view\n        override\n        returns (bytes memory)\n    {\n        return _getProxyCreationCode(mastercopy);\n    }\n\n    /// @dev Allows us to get the address for a new channel contract created via `createChannel`\n    /// @param alice address of the igh fidelity channel participant\n    /// @param bob address of the other channel participant\n    function getChannelAddress(address alice, address bob)\n        external\n        view\n        override\n        returns (address)\n    {\n        return\n            Create2.computeAddress(\n                generateSalt(alice, bob),\n                creationCodeHash\n            );\n    }\n\n    /// @dev Allows us to create new channel contract and get it all set up in one transaction\n    /// @param alice address of the high fidelity channel participant\n    /// @param bob address of the other channel participant\n    function createChannel(address alice, address bob)\n        public\n        override\n        returns (address channel)\n    {\n        channel = deployChannelProxy(alice, bob);\n        IVectorChannel(channel).setup(alice, bob);\n        emit ChannelCreation(channel);\n    }\n\n    /// @dev Allows us to create a new channel contract and fund it in one transaction\n    /// @param bob address of the other channel participant\n    function createChannelAndDepositAlice(\n        address alice,\n        address bob,\n        address assetId,\n        uint256 amount\n    ) external payable override returns (address channel) {\n        channel = createChannel(alice, bob);\n        // Deposit funds (if a token) must be approved for the\n        // `ChannelFactory`, which then claims the funds and transfers\n        // to the channel address. While this is inefficient, this is\n        // the safest/clearest way to transfer funds\n        if (!LibAsset.isEther(assetId)) {\n            require(\n                LibERC20.transferFrom(\n                    assetId,\n                    msg.sender,\n                    address(this),\n                    amount\n                ),\n                \"ChannelFactory: ERC20_TRANSFER_FAILED\"\n            );\n            require(\n                LibERC20.approve(assetId, address(channel), amount),\n                \"ChannelFactory: ERC20_APPROVE_FAILED\"\n            );\n        }\n        IVectorChannel(channel).depositAlice{value: msg.value}(assetId, amount);\n    }\n\n    ////////////////////////////////////////\n    // Internal Methods\n\n    function _getProxyCreationCode(address _mastercopy) internal pure returns (bytes memory) {\n      return abi.encodePacked(\n                proxyCreationCodePrefix,\n                _mastercopy,\n                proxyCreationCodeSuffix\n            );\n    }\n\n    /// @dev Allows us to create new channel contact using CREATE2\n    /// @param alice address of the high fidelity participant in the channel\n    /// @param bob address of the other channel participant\n    function deployChannelProxy(address alice, address bob)\n        internal\n        returns (address)\n    {\n        bytes32 salt = generateSalt(alice, bob);\n        return Create2.deploy(0, salt, getProxyCreationCode());\n    }\n\n    /// @dev Generates the unique salt for calculating the CREATE2 address of the channel proxy\n    function generateSalt(address alice, address bob)\n        internal\n        view\n        returns (bytes32)\n    {\n        return keccak256(abi.encodePacked(alice, bob, getChainId()));\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Create2.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n    /**\n     * @dev Deploys a contract using `CREATE2`. The address where the contract\n     * will be deployed can be known in advance via {computeAddress}.\n     *\n     * The bytecode for a contract can be obtained from Solidity with\n     * `type(contractName).creationCode`.\n     *\n     * Requirements:\n     *\n     * - `bytecode` must not be empty.\n     * - `salt` must have not been used for `bytecode` already.\n     * - the factory must have a balance of at least `amount`.\n     * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n     */\n    function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {\n        address addr;\n        require(address(this).balance >= amount, \"Create2: insufficient balance\");\n        require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n        }\n        require(addr != address(0), \"Create2: Failed on deploy\");\n        return addr;\n    }\n\n    /**\n     * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n     * `bytecodeHash` or `salt` will result in a new destination address.\n     */\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n        return computeAddress(salt, bytecodeHash, address(this));\n    }\n\n    /**\n     * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n     * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n     */\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {\n        bytes32 _data = keccak256(\n            abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)\n        );\n        return address(uint256(_data));\n    }\n}\n"
      },
      "src.sol/interfaces/IChannelFactory.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\ninterface IChannelFactory {\n    event ChannelCreation(address channel);\n\n    function getMastercopy() external view returns (address);\n\n    function getChainId() external view returns (uint256);\n\n    function getStoredChainId() external view returns (uint256);\n\n    function getProxyCreationCode() external view returns (bytes memory);\n\n    function getChannelAddress(address alice, address bob)\n        external\n        view\n        returns (address);\n\n    function createChannel(address alice, address bob)\n        external\n        returns (address);\n\n    function createChannelAndDepositAlice(\n        address alice,\n        address bob,\n        address assetId,\n        uint256 amount\n    ) external payable returns (address);\n}\n"
      },
      "src.sol/interfaces/IVectorChannel.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./ICMCCore.sol\";\nimport \"./ICMCAsset.sol\";\nimport \"./ICMCDeposit.sol\";\nimport \"./ICMCWithdraw.sol\";\nimport \"./ICMCAdjudicator.sol\";\n\ninterface IVectorChannel is\n    ICMCCore,\n    ICMCAsset,\n    ICMCDeposit,\n    ICMCWithdraw,\n    ICMCAdjudicator\n{}\n"
      },
      "src.sol/lib/LibAsset.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./LibERC20.sol\";\nimport \"./LibUtils.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n\n/// @title LibAsset\n/// @author Connext <support@connext.network>\n/// @notice This library contains helpers for dealing with onchain transfers\n///         of in-channel assets. It is designed to safely handle all asset\n///         transfers out of channel in the event of an onchain dispute. Also\n///         safely handles ERC20 transfers that may be non-compliant\nlibrary LibAsset {\n    address constant ETHER_ASSETID = address(0);\n\n    function isEther(address assetId) internal pure returns (bool) {\n        return assetId == ETHER_ASSETID;\n    }\n\n    function getOwnBalance(address assetId) internal view returns (uint256) {\n        return\n            isEther(assetId)\n                ? address(this).balance\n                : IERC20(assetId).balanceOf(address(this));\n    }\n\n    function transferEther(address payable recipient, uint256 amount)\n        internal\n        returns (bool)\n    {\n        (bool success, bytes memory returnData) =\n            recipient.call{value: amount}(\"\");\n        LibUtils.revertIfCallFailed(success, returnData);\n        return true;\n    }\n\n    function transferERC20(\n        address assetId,\n        address recipient,\n        uint256 amount\n    ) internal returns (bool) {\n        return LibERC20.transfer(assetId, recipient, amount);\n    }\n\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\n    // both standard-compliant ones as well as tokens that exhibit the\n    // missing-return-value bug.\n    // Although it behaves very much like Solidity's `transfer` function\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\n    // usage of those, it is deliberately named `unregisteredTransfer`,\n    // because we need to register every transfer out of the channel.\n    // Therefore, it should normally not be used directly, with the single\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\n    // which combines the \"naked\" unregistered transfer given below\n    // with a registration.\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\n    function unregisteredTransfer(\n        address assetId,\n        address payable recipient,\n        uint256 amount\n    ) internal returns (bool) {\n        return\n            isEther(assetId)\n                ? transferEther(recipient, amount)\n                : transferERC20(assetId, recipient, amount);\n    }\n}\n"
      },
      "src.sol/lib/LibERC20.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./LibUtils.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\n\n/// @title LibERC20\n/// @author Connext <support@connext.network>\n/// @notice This library provides several functions to safely handle\n///         noncompliant tokens (i.e. does not return a boolean from\n///         the transfer function)\n\nlibrary LibERC20 {\n    function wrapCall(address assetId, bytes memory callData)\n        internal\n        returns (bool)\n    {\n        require(Address.isContract(assetId), \"LibERC20: NO_CODE\");\n        (bool success, bytes memory returnData) = assetId.call(callData);\n        LibUtils.revertIfCallFailed(success, returnData);\n        return returnData.length == 0 || abi.decode(returnData, (bool));\n    }\n\n    function approve(\n        address assetId,\n        address spender,\n        uint256 amount\n    ) internal returns (bool) {\n        return\n            wrapCall(\n                assetId,\n                abi.encodeWithSignature(\n                    \"approve(address,uint256)\",\n                    spender,\n                    amount\n                )\n            );\n    }\n\n    function transferFrom(\n        address assetId,\n        address sender,\n        address recipient,\n        uint256 amount\n    ) internal returns (bool) {\n        return\n            wrapCall(\n                assetId,\n                abi.encodeWithSignature(\n                    \"transferFrom(address,address,uint256)\",\n                    sender,\n                    recipient,\n                    amount\n                )\n            );\n    }\n\n    function transfer(\n        address assetId,\n        address recipient,\n        uint256 amount\n    ) internal returns (bool) {\n        return\n            wrapCall(\n                assetId,\n                abi.encodeWithSignature(\n                    \"transfer(address,uint256)\",\n                    recipient,\n                    amount\n                )\n            );\n    }\n}\n"
      },
      "src.sol/interfaces/ICMCCore.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\ninterface ICMCCore {\n    function setup(address _alice, address _bob) external;\n\n    function getAlice() external view returns (address);\n\n    function getBob() external view returns (address);\n}\n"
      },
      "src.sol/interfaces/ICMCAsset.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\ninterface ICMCAsset {\n    function getTotalTransferred(address assetId)\n        external\n        view\n        returns (uint256);\n\n    function getExitableAmount(address assetId, address owner)\n        external\n        view\n        returns (uint256);\n\n    function exit(\n        address assetId,\n        address owner,\n        address payable recipient\n    ) external;\n}\n"
      },
      "src.sol/interfaces/ICMCDeposit.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\ninterface ICMCDeposit {\n    event AliceDeposited(address assetId, uint256 amount);\n    \n    function getTotalDepositsAlice(address assetId)\n        external\n        view\n        returns (uint256);\n\n    function getTotalDepositsBob(address assetId)\n        external\n        view\n        returns (uint256);\n\n    function depositAlice(address assetId, uint256 amount) external payable;\n}\n"
      },
      "src.sol/interfaces/ICMCWithdraw.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nstruct WithdrawData {\n    address channelAddress;\n    address assetId;\n    address payable recipient;\n    uint256 amount;\n    uint256 nonce;\n    address callTo;\n    bytes callData;\n}\n\ninterface ICMCWithdraw {\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\n        external\n        view\n        returns (bool);\n\n    function withdraw(\n        WithdrawData calldata wd,\n        bytes calldata aliceSignature,\n        bytes calldata bobSignature\n    ) external;\n}\n"
      },
      "src.sol/interfaces/ICMCAdjudicator.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./Types.sol\";\n\ninterface ICMCAdjudicator {\n    struct CoreChannelState {\n        address channelAddress;\n        address alice;\n        address bob;\n        address[] assetIds;\n        Balance[] balances;\n        uint256[] processedDepositsA;\n        uint256[] processedDepositsB;\n        uint256[] defundNonces;\n        uint256 timeout;\n        uint256 nonce;\n        bytes32 merkleRoot;\n    }\n\n    struct CoreTransferState {\n        address channelAddress;\n        bytes32 transferId;\n        address transferDefinition;\n        address initiator;\n        address responder;\n        address assetId;\n        Balance balance;\n        uint256 transferTimeout;\n        bytes32 initialStateHash;\n    }\n\n    struct ChannelDispute {\n        bytes32 channelStateHash;\n        uint256 nonce;\n        bytes32 merkleRoot;\n        uint256 consensusExpiry;\n        uint256 defundExpiry;\n    }\n\n    struct TransferDispute {\n        bytes32 transferStateHash;\n        uint256 transferDisputeExpiry;\n        bool isDefunded;\n    }\n\n    event ChannelDisputed(\n        address disputer,\n        CoreChannelState state,\n        ChannelDispute dispute\n    );\n\n    event ChannelDefunded(\n        address defunder,\n        CoreChannelState state,\n        ChannelDispute dispute,\n        address[] assetIds\n    );\n\n    event TransferDisputed(\n        address disputer,\n        CoreTransferState state,\n        TransferDispute dispute\n    );\n\n    event TransferDefunded(\n        address defunder,\n        CoreTransferState state,\n        TransferDispute dispute,\n        bytes encodedInitialState,\n        bytes encodedResolver,\n        Balance balance\n    );\n\n    function getChannelDispute() external view returns (ChannelDispute memory);\n\n    function getDefundNonce(address assetId) external view returns (uint256);\n\n    function getTransferDispute(bytes32 transferId)\n        external\n        view\n        returns (TransferDispute memory);\n\n    function disputeChannel(\n        CoreChannelState calldata ccs,\n        bytes calldata aliceSignature,\n        bytes calldata bobSignature\n    ) external;\n\n    function defundChannel(\n        CoreChannelState calldata ccs,\n        address[] calldata assetIds,\n        uint256[] calldata indices\n    ) external;\n\n    function disputeTransfer(\n        CoreTransferState calldata cts,\n        bytes32[] calldata merkleProofData\n    ) external;\n\n    function defundTransfer(\n        CoreTransferState calldata cts,\n        bytes calldata encodedInitialTransferState,\n        bytes calldata encodedTransferResolver,\n        bytes calldata responderSignature\n    ) external;\n}\n"
      },
      "src.sol/interfaces/Types.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nstruct Balance {\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\n}\n"
      },
      "src.sol/lib/LibUtils.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\n/// @title LibUtils\n/// @author Connext <support@connext.network>\n/// @notice Contains a helper to revert if a call was not successfully\n///         made\nlibrary LibUtils {\n    // If success is false, reverts and passes on the revert string.\n    function revertIfCallFailed(bool success, bytes memory returnData)\n        internal\n        pure\n    {\n        if (!success) {\n            assembly {\n                revert(add(returnData, 0x20), mload(returnData))\n            }\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\n        // for accounts without code, i.e. `keccak256('')`\n        bytes32 codehash;\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { codehash := extcodehash(account) }\n        return (codehash != accountHash && codehash != 0x0);\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n        (bool success, ) = recipient.call{ value: amount }(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain`call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n      return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        return _functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        return _functionCallWithValue(target, data, value, errorMessage);\n    }\n\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\n        require(isContract(target), \"Address: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n"
      },
      "src.sol/testing/TestChannelFactory.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IVectorChannel.sol\";\nimport \"../ChannelFactory.sol\";\n\n/// @title TestChannelFactory\n/// @author Layne Haber <layne@connext.network>\n/// @notice This factory is used for testing *ONLY* and allows you to\n///         deploy contracts without setting them up (to run the CMCCore\n///         setup tests)\ncontract TestChannelFactory is ChannelFactory {\n    constructor(address _mastercopy, uint256 _chainId)\n        ChannelFactory(_mastercopy, _chainId)\n    {}\n\n    function deployChannelProxyWithoutSetup(address alice, address bob)\n        public\n        returns (address)\n    {\n        return deployChannelProxy(alice, bob);\n    }\n\n    function createChannelWithoutSetup(address alice, address bob)\n        public\n        returns (address channel)\n    {\n        channel = deployChannelProxy(alice, bob);\n        emit ChannelCreation(channel);\n        return channel;\n    }\n}\n"
      },
      "src.sol/testing/ReentrantToken.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.7.1;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"../interfaces/IVectorChannel.sol\";\n\ncontract ReentrantToken is ERC20 {\n    address private immutable channel;\n\n    constructor(address _channel) ERC20(\"Reentrant Token\", \"BADBOI\") {\n        channel = _channel;\n    }\n\n    function mint(address account, uint256 amount) external {\n        _mint(account, amount);\n    }\n\n    // Designed to be called alongside CMCDeposit.depositAlice\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) public override returns (bool) {\n        IVectorChannel(channel).depositAlice(address(this), amount);\n        return super.transferFrom(sender, recipient, amount);\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../../GSN/Context.sol\";\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20 {\n    using SafeMath for uint256;\n    using Address for address;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n    uint8 private _decimals;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n     * a default value of 18.\n     *\n     * To select a different value for {decimals}, use {_setupDecimals}.\n     *\n     * All three of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor (string memory name, string memory symbol) {\n        _name = name;\n        _symbol = symbol;\n        _decimals = 18;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n     * called.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20};\n     *\n     * Requirements:\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(sender, recipient, amount);\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n        return true;\n    }\n\n    /**\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\n     *\n     * This is internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n        _balances[recipient] = _balances[recipient].add(amount);\n        emit Transfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements\n     *\n     * - `to` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply = _totalSupply.add(amount);\n        _balances[account] = _balances[account].add(amount);\n        emit Transfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n        _totalSupply = _totalSupply.sub(amount);\n        emit Transfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Sets {decimals} to a value other than the default one of 18.\n     *\n     * WARNING: This function should only be called from the constructor. Most\n     * applications that interact with token contracts will not expect\n     * {decimals} to ever change, and may work incorrectly if it does.\n     */\n    function _setupDecimals(uint8 decimals_) internal {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be to transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n}\n"
      },
      "@openzeppelin/contracts/GSN/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes memory) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        return msg.data;\n    }\n}\n"
      },
      "@openzeppelin/contracts/math/SafeMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n    /**\n     * @dev Returns the addition of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     *\n     * - Addition cannot overflow.\n     */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a, \"SafeMath: addition overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        return sub(a, b, \"SafeMath: subtraction overflow\");\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b <= a, errorMessage);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     *\n     * - Multiplication cannot overflow.\n     */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        return div(a, b, \"SafeMath: division by zero\");\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        return mod(a, b, \"SafeMath: modulo by zero\");\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts with custom message when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b != 0, errorMessage);\n        return a % b;\n    }\n}\n"
      },
      "src.sol/testing/TestToken.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.1;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\n/* This token is ONLY useful for testing\n * Anybody can mint as many tokens as they like\n * Anybody can burn anyone else's tokens\n */\ncontract TestToken is ERC20 {\n    constructor() ERC20(\"Test Token\", \"TEST\") {\n        _mint(msg.sender, 1000000 ether);\n    }\n\n    function mint(address account, uint256 amount) external {\n        _mint(account, amount);\n    }\n\n    function burn(address account, uint256 amount) external {\n        _burn(account, amount);\n    }\n}\n"
      },
      "src.sol/CMCDeposit.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/ICMCDeposit.sol\";\nimport \"./CMCCore.sol\";\nimport \"./CMCAsset.sol\";\nimport \"./lib/LibAsset.sol\";\nimport \"./lib/LibERC20.sol\";\n\n/// @title CMCDeposit\n/// @author Connext <support@connext.network>\n/// @notice Contains logic supporting channel multisig deposits. Channel\n///         funding is asymmetric, with `alice` having to call a deposit\n///         function which tracks the total amount she has deposited so far,\n///         and any other funds in the multisig being attributed to `bob`.\n\ncontract CMCDeposit is CMCCore, CMCAsset, ICMCDeposit {\n    mapping(address => uint256) private depositsAlice;\n\n    receive() external payable onlyViaProxy nonReentrant {}\n\n    function getTotalDepositsAlice(address assetId)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (uint256)\n    {\n        return _getTotalDepositsAlice(assetId);\n    }\n\n    function _getTotalDepositsAlice(address assetId)\n        internal\n        view\n        returns (uint256)\n    {\n        return depositsAlice[assetId];\n    }\n\n    function getTotalDepositsBob(address assetId)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (uint256)\n    {\n        return _getTotalDepositsBob(assetId);\n    }\n\n    // Calculated using invariant onchain properties. Note we DONT use safemath here\n    function _getTotalDepositsBob(address assetId)\n        internal\n        view\n        returns (uint256)\n    {\n        return\n            LibAsset.getOwnBalance(assetId) +\n            totalTransferred[assetId] -\n            depositsAlice[assetId];\n    }\n\n    function depositAlice(address assetId, uint256 amount)\n        external\n        payable\n        override\n        onlyViaProxy\n        nonReentrant\n    {\n        if (LibAsset.isEther(assetId)) {\n            require(msg.value == amount, \"CMCDeposit: VALUE_MISMATCH\");\n        } else {\n            // If ETH is sent along, it will be attributed to bob\n            require(msg.value == 0, \"CMCDeposit: ETH_WITH_ERC_TRANSFER\");\n            require(\n                LibERC20.transferFrom(\n                    assetId,\n                    msg.sender,\n                    address(this),\n                    amount\n                ),\n                \"CMCDeposit: ERC20_TRANSFER_FAILED\"\n            );\n        }\n        // NOTE: explicitly do NOT use safemath here\n        depositsAlice[assetId] += amount;\n        emit AliceDeposited(assetId, amount);\n    }\n}\n"
      },
      "src.sol/CMCCore.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/ICMCCore.sol\";\nimport \"./ReentrancyGuard.sol\";\n\n/// @title CMCCore\n/// @author Connext <support@connext.network>\n/// @notice Contains logic pertaining to the participants of a channel,\n///         including setting and retrieving the participants and the\n///         mastercopy.\n\ncontract CMCCore is ReentrancyGuard, ICMCCore {\n    address private immutable mastercopyAddress;\n\n    address internal alice;\n    address internal bob;\n\n    /// @notice Set invalid participants to block the mastercopy from being used directly\n    ///         Nonzero address also prevents the mastercopy from being setup\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\n    constructor() {\n        mastercopyAddress = address(this);\n    }\n\n    // Prevents us from calling methods directly from the mastercopy contract\n    modifier onlyViaProxy {\n        require(\n            address(this) != mastercopyAddress,\n            \"Mastercopy: ONLY_VIA_PROXY\"\n        );\n        _;\n    }\n\n    /// @notice Contract constructor for Proxied copies\n    /// @param _alice: Address representing user with function deposit\n    /// @param _bob: Address representing user with multisig deposit\n    function setup(address _alice, address _bob)\n        external\n        override\n        onlyViaProxy\n    {\n        require(alice == address(0), \"CMCCore: ALREADY_SETUP\");\n        require(\n            _alice != address(0) && _bob != address(0),\n            \"CMCCore: INVALID_PARTICIPANT\"\n        );\n        require(_alice != _bob, \"CMCCore: IDENTICAL_PARTICIPANTS\");\n        ReentrancyGuard.setup();\n        alice = _alice;\n        bob = _bob;\n    }\n\n    /// @notice A getter function for the bob of the multisig\n    /// @return Bob's signer address\n    function getAlice()\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (address)\n    {\n        return alice;\n    }\n\n    /// @notice A getter function for the bob of the multisig\n    /// @return Alice's signer address\n    function getBob()\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (address)\n    {\n        return bob;\n    }\n}\n"
      },
      "src.sol/CMCAsset.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/ICMCAsset.sol\";\nimport \"./interfaces/Types.sol\";\nimport \"./CMCCore.sol\";\nimport \"./lib/LibAsset.sol\";\nimport \"./lib/LibMath.sol\";\nimport \"@openzeppelin/contracts/math/Math.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @title CMCAsset\n/// @author Connext <support@connext.network>\n/// @notice Contains logic to safely transfer channel assets (even if they are\n///         noncompliant). During adjudication, balances from defunding the\n///         channel or defunding transfers are registered as withdrawable. Once\n///         they are registered, the owner (or a watchtower on behalf of the\n///         owner), may call `exit` to reclaim funds from the multisig.\n\ncontract CMCAsset is CMCCore, ICMCAsset {\n    using SafeMath for uint256;\n    using LibMath for uint256;\n\n    mapping(address => uint256) internal totalTransferred;\n    mapping(address => mapping(address => uint256))\n        private exitableAmount;\n\n    function registerTransfer(address assetId, uint256 amount) internal {\n        totalTransferred[assetId] += amount;\n    }\n\n    function getTotalTransferred(address assetId)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (uint256)\n    {\n        return totalTransferred[assetId];\n    }\n\n    function makeExitable(\n        address assetId,\n        address recipient,\n        uint256 amount\n    ) internal {\n        exitableAmount[assetId][\n            recipient\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\n    }\n\n    function makeBalanceExitable(\n        address assetId,\n        Balance memory balance\n    ) internal {\n        for (uint256 i = 0; i < 2; i++) {\n            uint256 amount = balance.amount[i];\n            if (amount > 0) {\n                makeExitable(assetId, balance.to[i], amount);\n            }\n        }\n    }\n\n    function getExitableAmount(address assetId, address owner)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (uint256)\n    {\n        return exitableAmount[assetId][owner];\n    }\n\n    function getAvailableAmount(address assetId, uint256 maxAmount)\n        internal\n        view\n        returns (uint256)\n    {\n        // Taking the min protects against the case where the multisig\n        // holds less than the amount that is trying to be withdrawn\n        // while still allowing the total of the funds to be removed\n        // without the transaction reverting.\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\n    }\n\n    function transferAsset(\n        address assetId,\n        address payable recipient,\n        uint256 amount\n    ) internal {\n        registerTransfer(assetId, amount);\n        require(\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\n            \"CMCAsset: TRANSFER_FAILED\"\n        );\n    }\n\n    function exit(\n        address assetId,\n        address owner,\n        address payable recipient\n    ) external override onlyViaProxy nonReentrant {\n        // Either the owner must be the recipient, or in control\n        // of setting the recipient of the funds to whomever they\n        // choose\n        require(\n            msg.sender == owner || owner == recipient,\n            \"CMCAsset: OWNER_MISMATCH\"\n        );\n\n        uint256 amount =\n            getAvailableAmount(\n                assetId,\n                exitableAmount[assetId][owner]\n            );\n\n        // Revert if amount is 0\n        require(amount > 0, \"CMCAsset: NO_OP\");\n\n        // Reduce the amount claimable from the multisig by the owner\n        exitableAmount[assetId][\n            owner\n        ] = exitableAmount[assetId][owner].sub(amount);\n\n        // Perform transfer\n        transferAsset(assetId, recipient, amount);\n    }\n}\n"
      },
      "src.sol/ReentrancyGuard.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\n/// @title CMCWithdraw\n/// @author Connext <support@connext.network>\n/// @notice A \"mutex\" reentrancy guard, heavily influenced by OpenZeppelin.\n\ncontract ReentrancyGuard {\n    uint256 private constant OPEN = 1;\n    uint256 private constant LOCKED = 2;\n\n    uint256 public lock;\n\n    function setup() internal {\n        lock = OPEN;\n    }\n\n    modifier nonReentrant() {\n        require(lock == OPEN, \"ReentrancyGuard: REENTRANT_CALL\");\n        lock = LOCKED;\n        _;\n        lock = OPEN;\n    }\n\n    modifier nonReentrantView() {\n        require(lock == OPEN, \"ReentrancyGuard: REENTRANT_CALL\");\n        _;\n    }\n}\n"
      },
      "src.sol/lib/LibMath.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\n/// @title LibMath\n/// @author Connext <support@connext.network>\n/// @notice This library allows functions that would otherwise overflow and\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\n///         adjudicator, this is used to ensure you can get the majority of\n///         funds out in the event your balance > UINT_MAX and there is an\n///         onchain dispute.\nlibrary LibMath {\n    /// @dev Returns the maximum uint256 for an addition that would overflow\n    ///      (saturation arithmetic)\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\n        uint256 sum = x + y;\n        return sum >= x ? sum : type(uint256).max;\n    }\n}\n"
      },
      "@openzeppelin/contracts/math/Math.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a >= b ? a : b;\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a < b ? a : b;\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow, so we distribute\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\n    }\n}\n"
      },
      "src.sol/CMCAdjudicator.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/Commitment.sol\";\nimport \"./interfaces/ICMCAdjudicator.sol\";\nimport \"./interfaces/ITransferDefinition.sol\";\nimport \"./interfaces/Types.sol\";\nimport \"./CMCCore.sol\";\nimport \"./CMCAsset.sol\";\nimport \"./CMCDeposit.sol\";\nimport \"./lib/LibChannelCrypto.sol\";\nimport \"./lib/LibMath.sol\";\nimport \"@openzeppelin/contracts/cryptography/MerkleProof.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\n/// @title CMCAdjudicator\n/// @author Connext <support@connext.network>\n/// @notice Contains logic for disputing a single channel and all active\n///         transfers associated with the channel. Contains two major phases:\n///         (1) consensus: settle on latest channel state\n///         (2) defund: remove assets and dispute active transfers\ncontract CMCAdjudicator is CMCCore, CMCAsset, CMCDeposit, ICMCAdjudicator {\n    using LibChannelCrypto for bytes32;\n    using LibMath for uint256;\n    using SafeMath for uint256;\n\n    uint256 private constant INITIAL_DEFUND_NONCE = 1;\n\n    ChannelDispute private channelDispute;\n    mapping(address => uint256) private defundNonces;\n    mapping(bytes32 => TransferDispute) private transferDisputes;\n\n    modifier validateChannel(CoreChannelState calldata ccs) {\n        require(\n            ccs.channelAddress == address(this) &&\n                ccs.alice == alice &&\n                ccs.bob == bob,\n            \"CMCAdjudicator: INVALID_CHANNEL\"\n        );\n        _;\n    }\n\n    modifier validateTransfer(CoreTransferState calldata cts) {\n        require(\n            cts.channelAddress == address(this),\n            \"CMCAdjudicator: INVALID_TRANSFER\"\n        );\n        _;\n    }\n\n    function getChannelDispute()\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (ChannelDispute memory)\n    {\n        return channelDispute;\n    }\n\n    function getDefundNonce(address assetId)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (uint256)\n    {\n        return defundNonces[assetId];\n    }\n\n    function getTransferDispute(bytes32 transferId)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (TransferDispute memory)\n    {\n        return transferDisputes[transferId];\n    }\n\n    function disputeChannel(\n        CoreChannelState calldata ccs,\n        bytes calldata aliceSignature,\n        bytes calldata bobSignature\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\n        // Generate hash\n        bytes32 ccsHash = hashChannelState(ccs);\n\n        // Verify Alice's and Bob's signature on the channel state\n        verifySignaturesOnChannelStateHash(ccs, ccsHash, aliceSignature, bobSignature);\n\n        // We cannot dispute a channel in its defund phase\n        require(!inDefundPhase(), \"CMCAdjudicator: INVALID_PHASE\");\n\n        // New nonce must be strictly greater than the stored one\n        require(\n            channelDispute.nonce < ccs.nonce,\n            \"CMCAdjudicator: INVALID_NONCE\"\n        );\n\n        if (!inConsensusPhase()) {\n            // We are not already in a dispute\n            // Set expiries\n            // TODO: offchain-ensure that there can't be an overflow\n            channelDispute.consensusExpiry = block.timestamp.add(ccs.timeout);\n            channelDispute.defundExpiry = block.timestamp.add(\n                ccs.timeout.mul(2)\n            );\n        }\n\n        // Store newer state\n        channelDispute.channelStateHash = ccsHash;\n        channelDispute.nonce = ccs.nonce;\n        channelDispute.merkleRoot = ccs.merkleRoot;\n\n        // Emit event\n        emit ChannelDisputed(msg.sender, ccs, channelDispute);\n    }\n\n    function defundChannel(\n        CoreChannelState calldata ccs,\n        address[] calldata assetIds,\n        uint256[] calldata indices\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\n        // These checks are not strictly necessary, but it's a bit cleaner this way\n        require(assetIds.length > 0, \"CMCAdjudicator: NO_ASSETS_GIVEN\");\n        require(\n            indices.length <= assetIds.length,\n            \"CMCAdjudicator: WRONG_ARRAY_LENGTHS\"\n        );\n\n        // Verify that the given channel state matches the stored one\n        require(\n            hashChannelState(ccs) == channelDispute.channelStateHash,\n            \"CMCAdjudicator: INVALID_CHANNEL_HASH\"\n        );\n\n        // We need to be in defund phase for that\n        require(inDefundPhase(), \"CMCAdjudicator: INVALID_PHASE\");\n\n        // TODO SECURITY: Beware of reentrancy\n        // TODO: offchain-ensure that all arrays have the same length:\n        // assetIds, balances, processedDepositsA, processedDepositsB, defundNonces\n        // Make sure there are no duplicates in the assetIds -- duplicates are often a source of double-spends\n\n        // Defund all assets given\n        for (uint256 i = 0; i < assetIds.length; i++) {\n            address assetId = assetIds[i];\n\n            // Verify or find the index of the assetId in the ccs.assetIds\n            uint256 index;\n            if (i < indices.length) {\n                // The index was supposedly given -- we verify\n                index = indices[i];\n                require(\n                    assetId == ccs.assetIds[index],\n                    \"CMCAdjudicator: INDEX_MISMATCH\"\n                );\n            } else {\n                // we search through the assets in ccs\n                for (index = 0; index < ccs.assetIds.length; index++) {\n                    if (assetId == ccs.assetIds[index]) {\n                        break;\n                    }\n                }\n            }\n\n            // Now, if `index`  is equal to the number of assets in ccs,\n            // then the current asset is not in ccs;\n            // otherwise, `index` is the index in ccs for the current asset\n\n            // Check the assets haven't already been defunded + update the\n            // defundNonce for that asset\n            {\n                // Open a new block to avoid \"stack too deep\" error\n                uint256 defundNonce =\n                    (index == ccs.assetIds.length)\n                        ? INITIAL_DEFUND_NONCE\n                        : ccs.defundNonces[index];\n                require(\n                    defundNonces[assetId] < defundNonce,\n                    \"CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED\"\n                );\n                defundNonces[assetId] = defundNonce;\n            }\n\n            // Get total deposits\n            uint256 tdAlice = _getTotalDepositsAlice(assetId);\n            uint256 tdBob = _getTotalDepositsBob(assetId);\n\n            Balance memory balance;\n\n            if (index == ccs.assetIds.length) {\n                // The current asset is not a part of ccs; refund what has been deposited\n                balance = Balance({\n                    amount: [tdAlice, tdBob],\n                    to: [payable(ccs.alice), payable(ccs.bob)]\n                });\n            } else {\n                // Start with the final balances in ccs\n                balance = ccs.balances[index];\n                // Add unprocessed deposits\n                balance.amount[0] = balance.amount[0].satAdd(\n                    tdAlice - ccs.processedDepositsA[index]\n                );\n                balance.amount[1] = balance.amount[1].satAdd(\n                    tdBob - ccs.processedDepositsB[index]\n                );\n            }\n\n            // Add result to exitable amounts\n            makeBalanceExitable(assetId, balance);\n        }\n\n        emit ChannelDefunded(\n            msg.sender,\n            ccs,\n            channelDispute,\n            assetIds\n        );\n    }\n\n    function disputeTransfer(\n        CoreTransferState calldata cts,\n        bytes32[] calldata merkleProofData\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\n        // Verify that the given transfer state is included in the \"finalized\" channel state\n        bytes32 transferStateHash = hashTransferState(cts);\n        verifyMerkleProof(\n            merkleProofData,\n            channelDispute.merkleRoot,\n            transferStateHash\n        );\n\n        // The channel needs to be in defund phase for that, i.e. channel state is \"finalized\"\n        require(inDefundPhase(), \"CMCAdjudicator: INVALID_PHASE\");\n\n        // Get stored dispute for this transfer\n        TransferDispute storage transferDispute =\n            transferDisputes[cts.transferId];\n\n        // Verify that this transfer has not been disputed before\n        require(\n            transferDispute.transferDisputeExpiry == 0,\n            \"CMCAdjudicator: TRANSFER_ALREADY_DISPUTED\"\n        );\n\n        // Store transfer state and set expiry\n        transferDispute.transferStateHash = transferStateHash;\n        // TODO: offchain-ensure that there can't be an overflow\n        transferDispute.transferDisputeExpiry = block.timestamp.add(\n            cts.transferTimeout\n        );\n\n        emit TransferDisputed(\n            msg.sender,\n            cts,\n            transferDispute\n        );\n    }\n\n    function defundTransfer(\n        CoreTransferState calldata cts,\n        bytes calldata encodedInitialTransferState,\n        bytes calldata encodedTransferResolver,\n        bytes calldata responderSignature\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\n        // Get stored dispute for this transfer\n        TransferDispute storage transferDispute =\n            transferDisputes[cts.transferId];\n\n        // Verify that a dispute for this transfer has already been started\n        require(\n            transferDispute.transferDisputeExpiry != 0,\n            \"CMCAdjudicator: TRANSFER_NOT_DISPUTED\"\n        );\n\n        // Verify that the given transfer state matches the stored one\n        require(\n            hashTransferState(cts) == transferDispute.transferStateHash,\n            \"CMCAdjudicator: INVALID_TRANSFER_HASH\"\n        );\n\n        // We can't defund twice\n        require(\n            !transferDispute.isDefunded,\n            \"CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED\"\n        );\n        transferDispute.isDefunded = true;\n\n        Balance memory balance;\n\n        if (block.timestamp < transferDispute.transferDisputeExpiry) {\n            // Ensure the correct hash is provided\n            require(\n                keccak256(encodedInitialTransferState) == cts.initialStateHash,\n                \"CMCAdjudicator: INVALID_TRANSFER_HASH\"\n            );\n            \n            // Before dispute expiry, responder or responder-authorized\n            // agent (i.e. watchtower) can resolve\n            require(\n                msg.sender == cts.responder || cts.initialStateHash.checkSignature(responderSignature, cts.responder),\n                \"CMCAdjudicator: INVALID_RESOLVER\"\n            );\n            \n            ITransferDefinition transferDefinition =\n                ITransferDefinition(cts.transferDefinition);\n            balance = transferDefinition.resolve(\n                abi.encode(cts.balance),\n                encodedInitialTransferState,\n                encodedTransferResolver\n            );\n            // Verify that returned balances don't exceed initial balances\n            require(\n                balance.amount[0].add(balance.amount[1]) <=\n                    cts.balance.amount[0].add(cts.balance.amount[1]),\n                \"CMCAdjudicator: INVALID_BALANCES\"\n            );\n        } else {\n            // After dispute expiry, if the responder hasn't resolved, we defund the initial balance\n            balance = cts.balance;\n        }\n\n        // Depending on previous code path, defund either resolved or initial balance\n        makeBalanceExitable(cts.assetId, balance);\n\n        // Emit event\n        emit TransferDefunded(\n            msg.sender,\n            cts,\n            transferDispute,\n            encodedInitialTransferState,\n            encodedTransferResolver,\n            balance\n        );\n    }\n\n    function verifySignaturesOnChannelStateHash(\n        CoreChannelState calldata ccs,\n        bytes32 ccsHash,\n        bytes calldata aliceSignature,\n        bytes calldata bobSignature\n    ) internal pure {\n        bytes32 commitment =\n            keccak256(abi.encode(CommitmentType.ChannelState, ccsHash));\n        require(\n            commitment.checkSignature(aliceSignature, ccs.alice),\n            \"CMCAdjudicator: INVALID_ALICE_SIG\"\n        );\n        require(\n            commitment.checkSignature(bobSignature, ccs.bob),\n            \"CMCAdjudicator: INVALID_BOB_SIG\"\n        );\n    }\n\n    function verifyMerkleProof(\n        bytes32[] calldata proof,\n        bytes32 root,\n        bytes32 leaf\n    ) internal pure {\n        require(\n            MerkleProof.verify(proof, root, leaf),\n            \"CMCAdjudicator: INVALID_MERKLE_PROOF\"\n        );\n    }\n\n    function inConsensusPhase() internal view returns (bool) {\n        return block.timestamp < channelDispute.consensusExpiry;\n    }\n\n    function inDefundPhase() internal view returns (bool) {\n        return\n            channelDispute.consensusExpiry <= block.timestamp &&\n            block.timestamp < channelDispute.defundExpiry;\n    }\n\n    function hashChannelState(CoreChannelState calldata ccs)\n        internal\n        pure\n        returns (bytes32)\n    {\n        return keccak256(abi.encode(ccs));\n    }\n\n    function hashTransferState(CoreTransferState calldata cts)\n        internal\n        pure\n        returns (bytes32)\n    {\n        return keccak256(abi.encode(cts));\n    }\n}\n"
      },
      "src.sol/interfaces/Commitment.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nenum CommitmentType {ChannelState, WithdrawData}\n"
      },
      "src.sol/interfaces/ITransferDefinition.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./ITransferRegistry.sol\";\nimport \"./Types.sol\";\n\ninterface ITransferDefinition {\n    // Validates the initial state of the transfer.\n    // Called by validator.ts during `create` updates.\n    function create(bytes calldata encodedBalance, bytes calldata)\n        external\n        view\n        returns (bool);\n\n    // Performs a state transition to resolve a transfer and returns final balances.\n    // Called by validator.ts during `resolve` updates.\n    function resolve(\n        bytes calldata encodedBalance,\n        bytes calldata,\n        bytes calldata\n    ) external view returns (Balance memory);\n\n    // Should also have the following properties:\n    // string public constant override Name = \"...\";\n    // string public constant override StateEncoding = \"...\";\n    // string public constant override ResolverEncoding = \"...\";\n    // These properties are included on the transfer specifically\n    // to make it easier for implementers to add new transfers by\n    // only include a `.sol` file\n    function Name() external view returns (string memory);\n\n    function StateEncoding() external view returns (string memory);\n\n    function ResolverEncoding() external view returns (string memory);\n\n    function EncodedCancel() external view returns (bytes memory);\n\n    function getRegistryInformation()\n        external\n        view\n        returns (RegisteredTransfer memory);\n}\n"
      },
      "src.sol/lib/LibChannelCrypto.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/cryptography/ECDSA.sol\";\n\t\t\n/// @author Connext <support@connext.network>\t\t\n/// @notice This library contains helpers for recovering signatures from a\t\t\n///         Vector commitments. Channels do not allow for arbitrary signing of\t\t\n///         messages to prevent misuse of private keys by injected providers,\t\t\n///         and instead only sign messages with a Vector channel prefix.\nlibrary LibChannelCrypto {\n    function checkSignature(\n        bytes32 hash,\n        bytes memory signature,\n        address allegedSigner\n    ) internal pure returns (bool) {\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\n    }\n\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\n        internal\n        pure\n        returns (address)\n    {\n        bytes32 digest = toChannelSignedMessage(hash);\n        return ECDSA.recover(digest, signature);\n    }\n\n    function toChannelSignedMessage(bytes32 hash)\n        internal\n        pure\n        returns (bytes32)\n    {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return\n            keccak256(abi.encodePacked(\"\\x16Vector Signed Message:\\n32\", hash));\n    }\n\n    function checkUtilitySignature(\n        bytes32 hash,\n        bytes memory signature,\n        address allegedSigner\n    ) internal pure returns (bool) {\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\n    }\n\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\n        internal\n        pure\n        returns (address)\n    {\n        bytes32 digest = toUtilitySignedMessage(hash);\n        return ECDSA.recover(digest, signature);\n    }\n\n    function toUtilitySignedMessage(bytes32 hash)\n        internal\n        pure\n        returns (bytes32)\n    {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return\n            keccak256(abi.encodePacked(\"\\x17Utility Signed Message:\\n32\", hash));\n    }\n}\n"
      },
      "@openzeppelin/contracts/cryptography/MerkleProof.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev These functions deal with verification of Merkle trees (hash trees),\n */\nlibrary MerkleProof {\n    /**\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n     * defined by `root`. For this, a `proof` must be provided, containing\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\n     */\n    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\n        bytes32 computedHash = leaf;\n\n        for (uint256 i = 0; i < proof.length; i++) {\n            bytes32 proofElement = proof[i];\n\n            if (computedHash <= proofElement) {\n                // Hash(current computed hash + current element of the proof)\n                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\n            } else {\n                // Hash(current element of the proof + current computed hash)\n                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\n            }\n        }\n\n        // Check if the computed hash (root) is equal to the provided root\n        return computedHash == root;\n    }\n}\n"
      },
      "src.sol/interfaces/ITransferRegistry.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental \"ABIEncoderV2\";\n\nstruct RegisteredTransfer {\n    string name;\n    address definition;\n    string stateEncoding;\n    string resolverEncoding;\n    bytes encodedCancel;\n}\n\ninterface ITransferRegistry {\n    event TransferAdded(RegisteredTransfer transfer);\n\n    event TransferRemoved(RegisteredTransfer transfer);\n\n    // Should add a transfer definition to the registry\n    // onlyOwner\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\n\n    // Should remove a transfer definition to the registry\n    // onlyOwner\n    function removeTransferDefinition(string memory name) external;\n\n    // Should return all transfer defintions in registry\n    function getTransferDefinitions()\n        external\n        view\n        returns (RegisteredTransfer[] memory);\n}\n"
      },
      "@openzeppelin/contracts/cryptography/ECDSA.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n    /**\n     * @dev Returns the address that signed a hashed message (`hash`) with\n     * `signature`. This address can then be used for verification purposes.\n     *\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n     * this function rejects them by requiring the `s` value to be in the lower\n     * half order, and the `v` value to be either 27 or 28.\n     *\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n     * verification to be secure: it is possible to craft signatures that\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n     * this is by receiving a hash of the original message (which may otherwise\n     * be too long), and then calling {toEthSignedMessageHash} on it.\n     */\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n        // Check the signature length\n        if (signature.length != 65) {\n            revert(\"ECDSA: invalid signature length\");\n        }\n\n        // Divide the signature in r, s and v variables\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n\n        // ecrecover takes the signature parameters, and the only way to get them\n        // currently is to use assembly.\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            r := mload(add(signature, 0x20))\n            s := mload(add(signature, 0x40))\n            v := byte(0, mload(add(signature, 0x60)))\n        }\n\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n        //\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n        // these malleable signatures as well.\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n            revert(\"ECDSA: invalid signature 's' value\");\n        }\n\n        if (v != 27 && v != 28) {\n            revert(\"ECDSA: invalid signature 'v' value\");\n        }\n\n        // If the signature is valid (and not malleable), return the signer address\n        address signer = ecrecover(hash, v, r, s);\n        require(signer != address(0), \"ECDSA: invalid signature\");\n\n        return signer;\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n     * replicates the behavior of the\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n     * JSON-RPC method.\n     *\n     * See {recover}.\n     */\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n    }\n}\n"
      },
      "src.sol/testing/NonconformingToken.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.1;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\n/* This token is ONLY useful for testing\n * Anybody can mint as many tokens as they like\n * Anybody can burn anyone else's tokens\n * It is intentionally not compliant to the ERC20 standard,\n * i.e. returns nothing instead of `true` for\n * several functions.\n * Based on OpenZeppelin's (standard-conforming) implementation.\n */\ncontract NonconformingToken {\n    using SafeMath for uint256;\n\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n    uint8 private _decimals;\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(\n        address indexed owner,\n        address indexed spender,\n        uint256 value\n    );\n\n    /**\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n     * a default value of 18.\n     *\n     * To select a different value for {decimals}, use {_setupDecimals}.\n     *\n     * All three of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor() {\n        _name = \"Nonconforming Token\";\n        _symbol = \"USDT\";\n        _decimals = 18;\n        _mint(msg.sender, 1000000 ether);\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n     * called.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual {\n        _transfer(msg.sender, recipient, amount);\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender)\n        public\n        view\n        virtual\n        returns (uint256)\n    {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual {\n        _approve(msg.sender, spender, amount);\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * Requirements:\n     *\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) public virtual {\n        _transfer(sender, recipient, amount);\n        _approve(\n            sender,\n            msg.sender,\n            _allowances[sender][msg.sender].sub(\n                amount,\n                \"ERC20: transfer amount exceeds allowance\"\n            )\n        );\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue)\n        public\n        virtual\n        returns (bool)\n    {\n        _approve(\n            msg.sender,\n            spender,\n            _allowances[msg.sender][spender].add(addedValue)\n        );\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue)\n        public\n        virtual\n        returns (bool)\n    {\n        _approve(\n            msg.sender,\n            spender,\n            _allowances[msg.sender][spender].sub(\n                subtractedValue,\n                \"ERC20: decreased allowance below zero\"\n            )\n        );\n        return true;\n    }\n\n    /**\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\n     *\n     * This is internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        _balances[sender] = _balances[sender].sub(\n            amount,\n            \"ERC20: transfer amount exceeds balance\"\n        );\n        _balances[recipient] = _balances[recipient].add(amount);\n        emit Transfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply = _totalSupply.add(amount);\n        _balances[account] = _balances[account].add(amount);\n        emit Transfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        _balances[account] = _balances[account].sub(\n            amount,\n            \"ERC20: burn amount exceeds balance\"\n        );\n        _totalSupply = _totalSupply.sub(amount);\n        emit Transfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Sets {decimals} to a value other than the default one of 18.\n     *\n     * WARNING: This function should only be called from the constructor. Most\n     * applications that interact with token contracts will not expect\n     * {decimals} to ever change, and may work incorrectly if it does.\n     */\n    function _setupDecimals(uint8 decimals_) internal {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be to transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    function mint(address account, uint256 amount) external {\n        _mint(account, amount);\n    }\n\n    function burn(address account, uint256 amount) external {\n        _burn(account, amount);\n    }\n}\n"
      },
      "src.sol/CMCWithdraw.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/Commitment.sol\";\nimport \"./interfaces/ICMCWithdraw.sol\";\nimport \"./interfaces/WithdrawHelper.sol\";\nimport \"./CMCCore.sol\";\nimport \"./CMCAsset.sol\";\nimport \"./lib/LibAsset.sol\";\nimport \"./lib/LibChannelCrypto.sol\";\nimport \"./lib/LibUtils.sol\";\n\n/// @title CMCWithdraw\n/// @author Connext <support@connext.network>\n/// @notice Contains logic for all cooperative channel multisig withdrawals.\n///         Cooperative withdrawal commitments must be signed by both channel\n///         participants. As part of the channel withdrawals, an arbitrary\n///         call can be made, which is extracted from the withdraw data.\n\ncontract CMCWithdraw is CMCCore, CMCAsset, ICMCWithdraw {\n    using LibChannelCrypto for bytes32;\n\n    mapping(bytes32 => bool) private isExecuted;\n\n    modifier validateWithdrawData(WithdrawData calldata wd) {\n        require(\n            wd.channelAddress == address(this),\n            \"CMCWithdraw: CHANNEL_MISMATCH\"\n        );\n        _;\n    }\n\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\n        external\n        view\n        override\n        onlyViaProxy\n        nonReentrantView\n        returns (bool)\n    {\n        return isExecuted[hashWithdrawData(wd)];\n    }\n\n    /// @param wd The withdraw data consisting of\n    /// semantic withdraw information, i.e. assetId, recipient, and amount;\n    /// information to make an optional call in addition to the actual transfer,\n    /// i.e. target address for the call and call payload;\n    /// additional information, i.e. channel address and nonce.\n    /// @param aliceSignature Signature of owner a\n    /// @param bobSignature Signature of owner b\n    function withdraw(\n        WithdrawData calldata wd,\n        bytes calldata aliceSignature,\n        bytes calldata bobSignature\n    ) external override onlyViaProxy nonReentrant validateWithdrawData(wd) {\n        // Generate hash\n        bytes32 wdHash = hashWithdrawData(wd);\n\n        // Verify Alice's and Bob's signature on the withdraw data\n        verifySignaturesOnWithdrawDataHash(wdHash, aliceSignature, bobSignature);\n\n        // Replay protection\n        require(!isExecuted[wdHash], \"CMCWithdraw: ALREADY_EXECUTED\");\n        isExecuted[wdHash] = true;\n\n        // Determine actually transferable amount\n        uint256 actualAmount = getAvailableAmount(wd.assetId, wd.amount);\n\n        // Revert if actualAmount is zero && callTo is 0\n        require(\n            actualAmount > 0 || wd.callTo != address(0),\n            \"CMCWithdraw: NO_OP\"\n        );\n\n        // Register and execute the transfer\n        transferAsset(wd.assetId, wd.recipient, actualAmount);\n\n        // Do we have to make a call in addition to the actual transfer?\n        if (wd.callTo != address(0)) {\n            WithdrawHelper(wd.callTo).execute(wd, actualAmount);\n        }\n    }\n\n    function verifySignaturesOnWithdrawDataHash(\n        bytes32 wdHash,\n        bytes calldata aliceSignature,\n        bytes calldata bobSignature\n    ) internal view {\n        bytes32 commitment =\n            keccak256(abi.encode(CommitmentType.WithdrawData, wdHash));\n        require(\n            commitment.checkSignature(aliceSignature, alice),\n            \"CMCWithdraw: INVALID_ALICE_SIG\"\n        );\n        require(\n            commitment.checkSignature(bobSignature, bob),\n            \"CMCWithdraw: INVALID_BOB_SIG\"\n        );\n    }\n\n    function hashWithdrawData(WithdrawData calldata wd)\n        internal\n        pure\n        returns (bytes32)\n    {\n        return keccak256(abi.encode(wd));\n    }\n}\n"
      },
      "src.sol/interfaces/WithdrawHelper.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./ICMCWithdraw.sol\";\n\ninterface WithdrawHelper {\n    function execute(WithdrawData calldata wd, uint256 actualAmount) external;\n}\n"
      },
      "src.sol/transferDefinitions/Withdraw.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./TransferDefinition.sol\";\nimport \"../lib/LibChannelCrypto.sol\";\n\n/// @title Withdraw\n/// @author Connext <support@connext.network>\n/// @notice This contract burns the initiator's funds if a mutually signed\n///         withdraw commitment can be generated\n\ncontract Withdraw is TransferDefinition {\n    using LibChannelCrypto for bytes32;\n\n    struct TransferState {\n        bytes initiatorSignature;\n        address initiator;\n        address responder;\n        bytes32 data;\n        uint256 nonce; // included so that each withdraw commitment has a unique hash\n        uint256 fee;\n        address callTo;\n        bytes callData;\n    }\n\n    struct TransferResolver {\n        bytes responderSignature;\n    }\n\n    // Provide registry information\n    string public constant override Name = \"Withdraw\";\n    string public constant override StateEncoding =\n        \"tuple(bytes initiatorSignature, address initiator, address responder, bytes32 data, uint256 nonce, uint256 fee, address callTo, bytes callData)\";\n    string public constant override ResolverEncoding =\n        \"tuple(bytes responderSignature)\";\n\n    function EncodedCancel() external pure override returns(bytes memory) {\n      TransferResolver memory resolver;\n      resolver.responderSignature = new bytes(65);\n      return abi.encode(resolver);\n    }\n\n    function create(bytes calldata encodedBalance, bytes calldata encodedState)\n        external\n        pure\n        override\n        returns (bool)\n    {\n        // Get unencoded information\n        TransferState memory state = abi.decode(encodedState, (TransferState));\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\n\n        require(balance.amount[1] == 0, \"Withdraw: NONZERO_RECIPIENT_BALANCE\");\n        require(\n            state.initiator != address(0) && state.responder != address(0),\n            \"Withdraw: EMPTY_SIGNERS\"\n        );\n        require(state.data != bytes32(0), \"Withdraw: EMPTY_DATA\");\n        require(state.nonce != uint256(0), \"Withdraw: EMPTY_NONCE\");\n        require(\n            state.fee <= balance.amount[0],\n            \"Withdraw: INSUFFICIENT_BALANCE\"\n        );\n        require(\n            state.data.checkSignature(\n                state.initiatorSignature,\n                state.initiator\n            ),\n            \"Withdraw: INVALID_INITIATOR_SIG\"\n        );\n        \n        // Valid initial transfer state\n        return true;\n    }\n\n    function resolve(\n        bytes calldata encodedBalance,\n        bytes calldata encodedState,\n        bytes calldata encodedResolver\n    ) external pure override returns (Balance memory) {\n        TransferState memory state = abi.decode(encodedState, (TransferState));\n        TransferResolver memory resolver =\n            abi.decode(encodedResolver, (TransferResolver));\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\n\n        // Allow for a withdrawal to be canceled if an empty signature is \n        // passed in. Should have *specific* cancellation action, not just\n        // any invalid sig\n        bytes memory b = new bytes(65);\n        if (keccak256(resolver.responderSignature) == keccak256(b)) {\n            // Withdraw should be cancelled, no state manipulation needed\n        } else {\n            require(\n                state.data.checkSignature(\n                    resolver.responderSignature,\n                    state.responder\n                ),\n                \"Withdraw: INVALID_RESPONDER_SIG\"\n            );\n            // Reduce withdraw amount by optional fee\n            // It's up to the offchain validators to ensure that the withdraw commitment takes this fee into account\n            balance.amount[1] = state.fee;\n            balance.amount[0] = 0;\n        }\n\n        return balance;\n    }\n}\n"
      },
      "src.sol/transferDefinitions/TransferDefinition.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/ITransferDefinition.sol\";\nimport \"../interfaces/ITransferRegistry.sol\";\n\n/// @title TransferDefinition\n/// @author Connext <support@connext.network>\n/// @notice This contract helps reduce boilerplate needed when creating\n///         new transfer definitions by providing an implementation of\n///         the required getter\n\nabstract contract TransferDefinition is ITransferDefinition {\n    function getRegistryInformation()\n        external\n        view\n        override\n        returns (RegisteredTransfer memory)\n    {\n        return\n            RegisteredTransfer({\n                name: this.Name(),\n                stateEncoding: this.StateEncoding(),\n                resolverEncoding: this.ResolverEncoding(),\n                definition: address(this),\n                encodedCancel: this.EncodedCancel()\n            });\n    }\n}\n"
      },
      "src.sol/TransferRegistry.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/ITransferRegistry.sol\";\nimport \"./lib/LibIterableMapping.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/// @title TransferRegistry\n/// @author Connext <support@connext.network>\n/// @notice The TransferRegistry maintains an onchain record of all\n///         supported transfers (specifically holds the registry information\n///         defined within the contracts). The offchain protocol uses\n///         this information to get the correct encodings when generating\n///         signatures. The information stored here can only be updated\n///         by the owner of the contract\n\ncontract TransferRegistry is Ownable, ITransferRegistry {\n    using LibIterableMapping for LibIterableMapping.IterableMapping;\n\n    LibIterableMapping.IterableMapping transfers;\n\n    /// @dev Should add a transfer definition to the registry\n    function addTransferDefinition(RegisteredTransfer memory definition)\n        external\n        override\n        onlyOwner\n    {\n        // Get index transfer will be added at\n        uint256 idx = transfers.length();\n        \n        // Add registered transfer\n        transfers.addTransferDefinition(definition);\n\n        // Emit event\n        emit TransferAdded(transfers.getTransferDefinitionByIndex(idx));\n    }\n\n    /// @dev Should remove a transfer definition from the registry\n    function removeTransferDefinition(string memory name)\n        external\n        override\n        onlyOwner\n    {\n        // Get transfer from library to remove for event\n        RegisteredTransfer memory transfer = transfers.getTransferDefinitionByName(name);\n\n        // Remove transfer\n        transfers.removeTransferDefinition(name);\n\n        // Emit event\n        emit TransferRemoved(transfer);\n    }\n\n    /// @dev Should return all transfer defintions in registry\n    function getTransferDefinitions()\n        external\n        view\n        override\n        returns (RegisteredTransfer[] memory)\n    {\n        return transfers.getTransferDefinitions();\n    }\n}\n"
      },
      "src.sol/lib/LibIterableMapping.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/ITransferRegistry.sol\";\n\n/// @title LibIterableMapping\n/// @author Connext <support@connext.network>\n/// @notice This library provides an efficient way to store and retrieve\n///         RegisteredTransfers. This contract is used to manage the transfers\n///         stored by `TransferRegistry.sol`\nlibrary LibIterableMapping {\n    struct TransferDefinitionWithIndex {\n        RegisteredTransfer transfer;\n        uint256 index;\n    }\n\n    struct IterableMapping {\n        mapping(string => TransferDefinitionWithIndex) transfers;\n        string[] names;\n    }\n\n    function stringEqual(string memory s, string memory t)\n        internal\n        pure\n        returns (bool)\n    {\n        return keccak256(abi.encodePacked(s)) == keccak256(abi.encodePacked(t));\n    }\n\n    function isEmptyString(string memory s) internal pure returns (bool) {\n        return stringEqual(s, \"\");\n    }\n\n    function nameExists(IterableMapping storage self, string memory name)\n        internal\n        view\n        returns (bool)\n    {\n        return\n            !isEmptyString(name) &&\n            self.names.length != 0 &&\n            stringEqual(self.names[self.transfers[name].index], name);\n    }\n\n    function length(IterableMapping storage self)\n        internal\n        view\n        returns (uint256)\n    {\n        return self.names.length;\n    }\n\n    function getTransferDefinitionByName(\n        IterableMapping storage self,\n        string memory name\n    ) internal view returns (RegisteredTransfer memory) {\n        require(nameExists(self, name), \"LibIterableMapping: NAME_NOT_FOUND\");\n        return self.transfers[name].transfer;\n    }\n\n    function getTransferDefinitionByIndex(\n        IterableMapping storage self,\n        uint256 index\n    ) internal view returns (RegisteredTransfer memory) {\n        require(index < self.names.length, \"LibIterableMapping: INVALID_INDEX\");\n        return self.transfers[self.names[index]].transfer;\n    }\n\n    function getTransferDefinitions(IterableMapping storage self)\n        internal\n        view\n        returns (RegisteredTransfer[] memory)\n    {\n        uint256 l = self.names.length;\n        RegisteredTransfer[] memory transfers = new RegisteredTransfer[](l);\n        for (uint256 i = 0; i < l; i++) {\n            transfers[i] = self.transfers[self.names[i]].transfer;\n        }\n        return transfers;\n    }\n\n    function addTransferDefinition(\n        IterableMapping storage self,\n        RegisteredTransfer memory transfer\n    ) internal {\n        string memory name = transfer.name;\n        require(!isEmptyString(name), \"LibIterableMapping: EMPTY_NAME\");\n        require(!nameExists(self, name), \"LibIterableMapping: NAME_ALREADY_ADDED\");\n        self.transfers[name] = TransferDefinitionWithIndex({\n            transfer: transfer,\n            index: self.names.length\n        });\n        self.names.push(name);\n    }\n\n    function removeTransferDefinition(\n        IterableMapping storage self,\n        string memory name\n    ) internal {\n        require(!isEmptyString(name), \"LibIterableMapping: EMPTY_NAME\");\n        require(nameExists(self, name), \"LibIterableMapping: NAME_NOT_FOUND\");\n        uint256 index = self.transfers[name].index;\n        string memory lastName = self.names[self.names.length - 1];\n        self.transfers[lastName].index = index;\n        self.names[index] = lastName;\n        delete self.transfers[name];\n        self.names.pop();\n    }\n}\n"
      },
      "@openzeppelin/contracts/access/Ownable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../GSN/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor () {\n        address msgSender = _msgSender();\n        _owner = msgSender;\n        emit OwnershipTransferred(address(0), msgSender);\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(_owner == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        emit OwnershipTransferred(_owner, address(0));\n        _owner = address(0);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        emit OwnershipTransferred(_owner, newOwner);\n        _owner = newOwner;\n    }\n}\n"
      },
      "src.sol/testing/TestLibIterableMapping.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/ITransferRegistry.sol\";\nimport \"../lib/LibIterableMapping.sol\";\n\n/// @title TestLibIterableMapping\n/// @author Layne Haber <layne@connext.network>\n/// @notice Used to easily test the internal methods of\n///         LibIterableMapping.sol by aliasing them to public\n///         methods.\ncontract TestLibIterableMapping {\n    using LibIterableMapping for LibIterableMapping.IterableMapping;\n\n    LibIterableMapping.IterableMapping data;\n\n    constructor() {}\n\n    function stringEqual(string memory s, string memory t)\n        public\n        pure\n        returns (bool)\n    {\n        return LibIterableMapping.stringEqual(s, t);\n    }\n\n    function isEmptyString(string memory s) public pure returns (bool) {\n        return LibIterableMapping.isEmptyString(s);\n    }\n\n    function nameExists(string memory name) public view returns (bool) {\n        return LibIterableMapping.nameExists(data, name);\n    }\n\n    function length() public view returns (uint256) {\n        return LibIterableMapping.length(data);\n    }\n\n    function getTransferDefinitionByName(string memory name)\n        public\n        view\n        returns (RegisteredTransfer memory)\n    {\n        return LibIterableMapping.getTransferDefinitionByName(data, name);\n    }\n\n    function getTransferDefinitionByIndex(uint256 index)\n        public\n        view\n        returns (RegisteredTransfer memory)\n    {\n        return LibIterableMapping.getTransferDefinitionByIndex(data, index);\n    }\n\n    function getTransferDefinitions()\n        public\n        view\n        returns (RegisteredTransfer[] memory)\n    {\n        return LibIterableMapping.getTransferDefinitions(data);\n    }\n\n    function addTransferDefinition(RegisteredTransfer memory transfer) public {\n        return LibIterableMapping.addTransferDefinition(data, transfer);\n    }\n\n    function removeTransferDefinition(string memory name) public {\n        return LibIterableMapping.removeTransferDefinition(data, name);\n    }\n}\n"
      },
      "src.sol/interfaces/ITestChannel.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./IVectorChannel.sol\";\nimport \"./Types.sol\";\n\ninterface ITestChannel is IVectorChannel {\n    function testMakeExitable(\n        address assetId,\n        address payable recipient,\n        uint256 maxAmount\n    ) external;\n\n    function testMakeBalanceExitable(\n        address assetId,\n        Balance memory balance\n    ) external;\n}\n"
      },
      "src.sol/testing/TestChannel.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental \"ABIEncoderV2\";\n\nimport \"../ChannelMastercopy.sol\";\nimport \"../interfaces/ITestChannel.sol\";\n\n/// @title TestChannel\n/// @author Layne Haber <layne@connext.network>\n/// @notice This contract will help test the `ChannelMastercopy` contract and\n///         the associated bits of functionality. This contract should *only*\n///         contain aliases to internal functions that should be unit-tested,\n///         like the `makeExitable` call on `CMCAsset.sol`. Using this\n///         contract will help reduce the amount of boilerplate needed to test\n///         component functionality. For example, `CMCAsset.sol` is only\n///         able to be tested via the adjudicator in many practical cases.\n///         Creating a helper function allows for easier testing of only\n///         that functionality.\n\ncontract TestChannel is ChannelMastercopy, ITestChannel {\n    function testMakeExitable(\n        address assetId,\n        address payable recipient,\n        uint256 maxAmount\n    ) public override {\n        makeExitable(assetId, recipient, maxAmount);\n    }\n\n    function testMakeBalanceExitable(\n        address assetId,\n        Balance memory balance\n    ) public override {\n        makeBalanceExitable(assetId, balance);\n    }\n}\n"
      },
      "src.sol/ChannelMastercopy.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./interfaces/IVectorChannel.sol\";\nimport \"./CMCCore.sol\";\nimport \"./CMCAsset.sol\";\nimport \"./CMCDeposit.sol\";\nimport \"./CMCWithdraw.sol\";\nimport \"./CMCAdjudicator.sol\";\n\n/// @title ChannelMastercopy\n/// @author Connext <support@connext.network>\n/// @notice Contains the logic used by all Vector multisigs. A proxy to this\n///         contract is deployed per-channel using the ChannelFactory.sol.\n///         Supports channel adjudication logic, deposit logic, and arbitrary\n///         calls when a commitment is double-signed.\ncontract ChannelMastercopy is\n    CMCCore,\n    CMCAsset,\n    CMCDeposit,\n    CMCWithdraw,\n    CMCAdjudicator,\n    IVectorChannel\n{\n\n}\n"
      },
      "src.sol/transferDefinitions/HashlockTransfer.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.7.1;\npragma experimental ABIEncoderV2;\n\nimport \"./TransferDefinition.sol\";\n\n/// @title HashlockTransfer\n/// @author Connext <support@connext.network>\n/// @notice This contract allows users to claim a payment locked in\n///         the application if they provide the correct preImage. The payment is\n///         reverted if not unlocked by the timelock if one is provided.\n\ncontract HashlockTransfer is TransferDefinition {\n    struct TransferState {\n        bytes32 lockHash;\n        uint256 expiry; // If 0, then no timelock is enforced\n    }\n\n    struct TransferResolver {\n        bytes32 preImage;\n    }\n\n    // Provide registry information\n    string public constant override Name = \"HashlockTransfer\";\n    string public constant override StateEncoding =\n        \"tuple(bytes32 lockHash, uint256 expiry)\";\n    string public constant override ResolverEncoding =\n        \"tuple(bytes32 preImage)\";\n\n    function EncodedCancel() external pure override returns(bytes memory) {\n      TransferResolver memory resolver;\n      resolver.preImage = bytes32(0);\n      return abi.encode(resolver);\n    } \n\n    function create(bytes calldata encodedBalance, bytes calldata encodedState)\n        external\n        view\n        override\n        returns (bool)\n    {\n        // Decode parameters\n        TransferState memory state = abi.decode(encodedState, (TransferState));\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\n\n        require(\n            balance.amount[0] > 0,\n            \"HashlockTransfer: ZER0_SENDER_BALANCE\"\n        );\n\n        require(\n            balance.amount[1] == 0,\n            \"HashlockTransfer: NONZERO_RECIPIENT_BALANCE\"\n        );\n        require(\n            state.lockHash != bytes32(0),\n            \"HashlockTransfer: EMPTY_LOCKHASH\"\n        );\n        require(\n            state.expiry == 0 || state.expiry > block.timestamp,\n            \"HashlockTransfer: EXPIRED_TIMELOCK\"\n        );\n\n        // Valid transfer state\n        return true;\n    }\n\n    function resolve(\n        bytes calldata encodedBalance,\n        bytes calldata encodedState,\n        bytes calldata encodedResolver\n    ) external view override returns (Balance memory) {\n        TransferState memory state = abi.decode(encodedState, (TransferState));\n        TransferResolver memory resolver =\n            abi.decode(encodedResolver, (TransferResolver));\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\n\n        // If you pass in bytes32(0), payment is canceled\n        // If timelock is nonzero and has expired, payment must be canceled\n        // otherwise resolve will revert\n        if (resolver.preImage != bytes32(0)) {\n            // Payment must not be expired\n            require(state.expiry == 0 || state.expiry > block.timestamp, \"HashlockTransfer: PAYMENT_EXPIRED\");\n\n            // Check hash for normal payment unlock\n            bytes32 generatedHash = sha256(abi.encode(resolver.preImage));\n            require(\n                state.lockHash == generatedHash,\n                \"HashlockTransfer: INVALID_PREIMAGE\"\n            );\n\n            // Update state\n            balance.amount[1] = balance.amount[0];\n            balance.amount[0] = 0;\n        }\n        // To cancel, the preImage must be empty (not simply incorrect)\n        // There are no additional state mutations, and the preImage is\n        // asserted by the `if` statement\n\n        return balance;\n    }\n}\n"
      },
      "src.sol/testing/FailingToken.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.1;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\n/* This token is ONLY useful for testing\n * Anybody can mint as many tokens as they like\n * Anybody can burn anyone else's tokens\n * Will fail to transfer ANY tokens\n */\ncontract FailingToken is ERC20 {\n    bool public transferShouldRevert;\n    bool public transferShouldFail;\n    bool public rejectEther;\n\n    constructor() ERC20(\"Failing Token\", \"FAIL\") {\n        transferShouldRevert = true;\n        _mint(msg.sender, 1000000 ether);\n    }\n\n    receive() external payable {\n        if (rejectEther) {\n            revert(\"ERC20: ETHER_REJECTED\");\n        }\n    }\n\n    function mint(address account, uint256 amount) external {\n        _mint(account, amount);\n    }\n\n    function burn(address account, uint256 amount) external {\n        _burn(account, amount);\n    }\n\n    function transfer(address recipient, uint256 amount)\n        public\n        override\n        returns (bool)\n    {\n        if (transferShouldRevert) {\n            revert(\"FAIL: Failing token\");\n        }\n        if (transferShouldFail) {\n            return false;\n        }\n        return super.transfer(recipient, amount);\n    }\n\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) public override returns (bool) {\n        if (transferShouldRevert) {\n            revert(\"FAIL: Failing token\");\n        }\n        if (transferShouldFail) {\n            return false;\n        }\n        return super.transferFrom(sender, recipient, amount);\n    }\n\n    function setTransferShouldRevert(bool _transferShouldRevert)\n        public\n        returns (bool)\n    {\n        transferShouldRevert = _transferShouldRevert;\n        return transferShouldRevert;\n    }\n\n    function setTransferShouldFail(bool _transferShouldFail)\n        public\n        returns (bool)\n    {\n        transferShouldFail = _transferShouldFail;\n        return transferShouldFail;\n    }\n\n    function setRejectEther(bool _rejectEther) public returns (bool) {\n        rejectEther = _rejectEther;\n        return rejectEther;\n    }\n\n    function succeedingTransfer(address recipient, uint256 amount)\n        public\n        returns (bool)\n    {\n        return super.transfer(recipient, amount);\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "devdoc",
            "userdoc",
            "storageLayout",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "@openzeppelin/contracts/GSN/Context.sol": {
        "Context": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/GSN/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/access/Ownable.sol": {
        "Ownable": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.",
            "kind": "dev",
            "methods": {
              "constructor": {
                "details": "Initializes the contract setting the deployer as the initial owner."
              },
              "owner()": {
                "details": "Returns the address of the current owner."
              },
              "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
              },
              "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6102c78061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b14610074575b600080fd5b61004e61009a565b005b61005861014e565b604080516001600160a01b039092168252519081900360200190f35b61004e6004803603602081101561008a57600080fd5b50356001600160a01b031661015d565b6100a2610267565b6000546001600160a01b03908116911614610104576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610165610267565b6000546001600160a01b039081169116146101c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661020c5760405162461bcd60e51b815260040180806020018281038252602681526020018061026c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212202767f8ebc3c27a3c7dab0ab7abfd15aff726a1b70156bd8626df3d12556799d264736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x1B PUSH2 0x6A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x6E JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x2C7 DUP1 PUSH2 0x7D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x74 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x58 PUSH2 0x14E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15D JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x267 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x104 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x267 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1C7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x26C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F2061646472657373A26469706673582212202767F8EBC3C2 PUSH27 0x3C7DAB0AB7ABFD15AFF726A1B70156BD8626DF3D12556799D26473 PUSH16 0x6C634300070100330000000000000000 ",
              "sourceMap": "582:1634:1:-:0;;;831:150;;;;;;;;;-1:-1:-1;856:17:1;876:12;:10;:12::i;:::-;898:6;:18;;-1:-1:-1;;;;;;898:18:1;-1:-1:-1;;;;;898:18:1;;;;;;;931:43;;898:18;;-1:-1:-1;898:18:1;931:43;;898:6;;931:43;831:150;582:1634;;590:104:0;677:10;590:104;:::o;582:1634:1:-;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b14610074575b600080fd5b61004e61009a565b005b61005861014e565b604080516001600160a01b039092168252519081900360200190f35b61004e6004803603602081101561008a57600080fd5b50356001600160a01b031661015d565b6100a2610267565b6000546001600160a01b03908116911614610104576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610165610267565b6000546001600160a01b039081169116146101c7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661020c5760405162461bcd60e51b815260040180806020018281038252602681526020018061026c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212202767f8ebc3c27a3c7dab0ab7abfd15aff726a1b70156bd8626df3d12556799d264736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x74 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x58 PUSH2 0x14E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15D JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x267 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x104 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x267 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1C7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x26C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F2061646472657373A26469706673582212202767F8EBC3C2 PUSH27 0x3C7DAB0AB7ABFD15AFF726A1B70156BD8626DF3D12556799D26473 PUSH16 0x6C634300070100330000000000000000 ",
              "sourceMap": "582:1634:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1680:145;;;:::i;:::-;;1057:77;;;:::i;:::-;;;;-1:-1:-1;;;;;1057:77:1;;;;;;;;;;;;;;1974:240;;;;;;;;;;;;;;;;-1:-1:-1;1974:240:1;-1:-1:-1;;;;;1974:240:1;;:::i;1680:145::-;1271:12;:10;:12::i;:::-;1261:6;;-1:-1:-1;;;;;1261:6:1;;;:22;;;1253:67;;;;;-1:-1:-1;;;1253:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:1:::1;1770:6:::0;;1749:40:::1;::::0;-1:-1:-1;;;;;1770:6:1;;::::1;::::0;1749:40:::1;::::0;1786:1;;1749:40:::1;1816:1;1799:19:::0;;-1:-1:-1;;;;;;1799:19:1::1;::::0;;1680:145::o;1057:77::-;1095:7;1121:6;-1:-1:-1;;;;;1121:6:1;1057:77;:::o;1974:240::-;1271:12;:10;:12::i;:::-;1261:6;;-1:-1:-1;;;;;1261:6:1;;;:22;;;1253:67;;;;;-1:-1:-1;;;1253:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2062:22:1;::::1;2054:73;;;;-1:-1:-1::0;;;2054:73:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2163:6;::::0;;2142:38:::1;::::0;-1:-1:-1;;;;;2142:38:1;;::::1;::::0;2163:6;::::1;::::0;2142:38:::1;::::0;::::1;2190:6;:17:::0;;-1:-1:-1;;;;;;2190:17:1::1;-1:-1:-1::0;;;;;2190:17:1;;;::::1;::::0;;;::::1;::::0;;1974:240::o;590:104:0:-;677:10;590:104;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "142200",
                "executionCost": "22625",
                "totalCost": "164825"
              },
              "external": {
                "owner()": "1037",
                "renounceOwnership()": "24182",
                "transferOwnership(address)": "infinite"
              }
            },
            "methodIdentifiers": {
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../GSN/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor () {\\n        address msgSender = _msgSender();\\n        _owner = msgSender;\\n        emit OwnershipTransferred(address(0), msgSender);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(_owner == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\"keccak256\":\"0x74b0525c81e47810f1bd795755962bdb84de3a4f71cfcb063f4c4d4999a3e96b\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 30,
                "contract": "@openzeppelin/contracts/access/Ownable.sol:Ownable",
                "label": "_owner",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/cryptography/ECDSA.sol": {
        "ECDSA": {
          "abi": [],
          "devdoc": {
            "details": "Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206cb0c0a2bdbfaf448b9b6806ff1669130eccd35bcb47beaa1e2bbeec9ec3988d64736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0xB0C0A2BDBFAF448B9B6806FF16 PUSH10 0x130ECCD35BCB47BEAA1E 0x2B 0xBE 0xEC SWAP15 0xC3 SWAP9 DUP14 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "264:3399:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206cb0c0a2bdbfaf448b9b6806ff1669130eccd35bcb47beaa1e2bbeec9ec3988d64736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0xB0C0A2BDBFAF448B9B6806FF16 PUSH10 0x130ECCD35BCB47BEAA1E 0x2B 0xBE 0xEC SWAP15 0xC3 SWAP9 DUP14 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "264:3399:2:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "recover(bytes32,bytes memory)": "infinite",
                "toEthSignedMessageHash(bytes32)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/cryptography/MerkleProof.sol": {
        "MerkleProof": {
          "abi": [],
          "devdoc": {
            "details": "These functions deal with verification of Merkle trees (hash trees),",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220203a2a94b58d77a29d4d8fb3fa0c3128b478a3721e23bd43632135092fb43f3664736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 GASPRICE 0x2A SWAP5 0xB5 DUP14 PUSH24 0xA29D4D8FB3FA0C3128B478A3721E23BD43632135092FB43F CALLDATASIZE PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "143:1135:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220203a2a94b58d77a29d4d8fb3fa0c3128b478a3721e23bd43632135092fb43f3664736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 GASPRICE 0x2A SWAP5 0xB5 DUP14 PUSH24 0xA29D4D8FB3FA0C3128B478A3721E23BD43632135092FB43F CALLDATASIZE PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "143:1135:3:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "verify(bytes32[] memory,bytes32,bytes32)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"These functions deal with verification of Merkle trees (hash trees),\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/cryptography/MerkleProof.sol\":\"MerkleProof\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle trees (hash trees),\\n */\\nlibrary MerkleProof {\\n    /**\\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n     * defined by `root`. For this, a `proof` must be provided, containing\\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\\n     */\\n    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\\n        bytes32 computedHash = leaf;\\n\\n        for (uint256 i = 0; i < proof.length; i++) {\\n            bytes32 proofElement = proof[i];\\n\\n            if (computedHash <= proofElement) {\\n                // Hash(current computed hash + current element of the proof)\\n                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n            } else {\\n                // Hash(current element of the proof + current computed hash)\\n                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n            }\\n        }\\n\\n        // Check if the computed hash (root) is equal to the provided root\\n        return computedHash == root;\\n    }\\n}\\n\",\"keccak256\":\"0x4959be2683e7af3439cb94f06aa6c40cb42ca9336747d0c7dce54f07196489bc\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/math/Math.sol": {
        "Math": {
          "abi": [],
          "devdoc": {
            "details": "Standard math utilities missing in the Solidity language.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209a37ebc754e0ac54b8d3a3919812df6609a4f0a12e82c1137f0781f2cec1c44864736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 CALLDATACOPY 0xEB 0xC7 SLOAD 0xE0 0xAC SLOAD 0xB8 0xD3 LOG3 SWAP2 SWAP9 SLT 0xDF PUSH7 0x9A4F0A12E82C1 SGT PUSH32 0x781F2CEC1C44864736F6C634300070100330000000000000000000000000000 ",
              "sourceMap": "132:668:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209a37ebc754e0ac54b8d3a3919812df6609a4f0a12e82c1137f0781f2cec1c44864736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 CALLDATACOPY 0xEB 0xC7 SLOAD 0xE0 0xAC SLOAD 0xB8 0xD3 LOG3 SWAP2 SWAP9 SLT 0xDF PUSH7 0x9A4F0A12E82C1 SGT PUSH32 0x781F2CEC1C44864736F6C634300070100330000000000000000000000000000 ",
              "sourceMap": "132:668:4:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "average(uint256,uint256)": "infinite",
                "max(uint256,uint256)": "infinite",
                "min(uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/math/Math.sol\":\"Math\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/math/SafeMath.sol": {
        "SafeMath": {
          "abi": [],
          "devdoc": {
            "details": "Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220828385a1443ad103efd67330a29c77b352bb2a64c3954d78b2f484a8f6faaf5064736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 DUP4 DUP6 LOG1 DIFFICULTY GASPRICE 0xD1 SUB 0xEF 0xD6 PUSH20 0x30A29C77B352BB2A64C3954D78B2F484A8F6FAAF POP PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "622:4578:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220828385a1443ad103efd67330a29c77b352bb2a64c3954d78b2f484a8f6faaf5064736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 DUP4 DUP6 LOG1 DIFFICULTY GASPRICE 0xD1 SUB 0xEF 0xD6 PUSH20 0x30A29C77B352BB2A64C3954D78B2F484A8F6FAAF POP PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "622:4578:5:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "add(uint256,uint256)": "infinite",
                "div(uint256,uint256)": "infinite",
                "div(uint256,uint256,string memory)": "infinite",
                "mod(uint256,uint256)": "infinite",
                "mod(uint256,uint256,string memory)": "infinite",
                "mul(uint256,uint256)": "infinite",
                "sub(uint256,uint256)": "infinite",
                "sub(uint256,uint256,string memory)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "ERC20": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.",
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "constructor": {
                "details": "Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405162000c6238038062000c628339818101604052604081101561003557600080fd5b810190808051604051939291908464010000000082111561005557600080fd5b90830190602082018581111561006a57600080fd5b825164010000000081118282018810171561008457600080fd5b82525081516020918201929091019080838360005b838110156100b1578181015183820152602001610099565b50505050905090810190601f1680156100de5780820380516001836020036101000a031916815260200191505b506040526020018051604051939291908464010000000082111561010157600080fd5b90830190602082018581111561011657600080fd5b825164010000000081118282018810171561013057600080fd5b82525081516020918201929091019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b50604052505082516101a4915060039060208501906101cd565b5080516101b89060049060208401906101cd565b50506005805460ff1916601217905550610260565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061020e57805160ff191683800117855561023b565b8280016001018555821561023b579182015b8281111561023b578251825591602001919060010190610220565b5061024792915061024b565b5090565b5b80821115610247576000815560010161024c565b6109f280620002706000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103f9565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610402565b6101736004803603602081101561021b57600080fd5b50356001600160a01b0316610450565b6100b661046b565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104cc565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610534565b610173600480360360408110156102a157600080fd5b506001600160a01b0381358116916020013516610548565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610573565b8484610577565b50600192915050565b60025490565b600061037f848484610663565b6103ef8461038b610573565b6103ea85604051806060016040528060288152602001610927602891396001600160a01b038a166000908152600160205260408120906103c9610573565b6001600160a01b0316815260208101919091526040016000205491906107be565b610577565b5060019392505050565b60055460ff1690565b600061036361040f610573565b846103ea8560016000610420610573565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610855565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104d9610573565b846103ea856040518060600160405280602581526020016109986025913960016000610503610573565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906107be565b6000610363610541610573565b8484610663565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105bc5760405162461bcd60e51b81526004018080602001828103825260248152602001806109746024913960400191505060405180910390fd5b6001600160a01b0382166106015760405162461bcd60e51b81526004018080602001828103825260228152602001806108df6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106a85760405162461bcd60e51b815260040180806020018281038252602581526020018061094f6025913960400191505060405180910390fd5b6001600160a01b0382166106ed5760405162461bcd60e51b81526004018080602001828103825260238152602001806108bc6023913960400191505060405180910390fd5b6106f88383836108b6565b61073581604051806060016040528060268152602001610901602691396001600160a01b03861660009081526020819052604090205491906107be565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546107649082610855565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561084d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108125781810151838201526020016107fa565b50505050905090810190601f16801561083f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122035c4adeddc822f673f0d677bc56a91f242a3530b307e9f24122d4b607a2d790564736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xC62 CODESIZE SUB DUP1 PUSH3 0xC62 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x99 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDE JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x145 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x18A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP DUP3 MLOAD PUSH2 0x1A4 SWAP2 POP PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1CD JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1B8 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1CD JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH2 0x260 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x20E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x23B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x23B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x23B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x220 JUMP JUMPDEST POP PUSH2 0x247 SWAP3 SWAP2 POP PUSH2 0x24B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x247 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x24C JUMP JUMPDEST PUSH2 0x9F2 DUP1 PUSH3 0x270 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3F9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x402 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x450 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x46B JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4CC JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x534 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x548 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x573 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x577 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH2 0x3EF DUP5 PUSH2 0x38B PUSH2 0x573 JUMP JUMPDEST PUSH2 0x3EA DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x927 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7BE JUMP JUMPDEST PUSH2 0x577 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x40F PUSH2 0x573 JUMP JUMPDEST DUP5 PUSH2 0x3EA DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x420 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x855 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4D9 PUSH2 0x573 JUMP JUMPDEST DUP5 PUSH2 0x3EA DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x998 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x503 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7BE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x541 PUSH2 0x573 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x974 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x601 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DF PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x94F PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8BC PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F8 DUP4 DUP4 DUP4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x735 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x901 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7BE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH2 0x855 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x84D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x812 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7FA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x83F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x735822122035C4 0xAD 0xED 0xDC DUP3 0x2F PUSH8 0x3F0D677BC56A91F2 TIMESTAMP LOG3 MSTORE8 SIGNEXTEND ADDRESS PUSH31 0x9F24122D4B607A2D790564736F6C6343000701003300000000000000000000 ",
              "sourceMap": "1345:9437:6:-:0;;;2013:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2013:134:6;;;;;;;;;;-1:-1:-1;2013:134:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2013:134:6;;;;;;;;;;-1:-1:-1;2013:134:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2013:134:6;;-1:-1:-1;;2078:12:6;;;;-1:-1:-1;2078:5:6;;:12;;;;;:::i;:::-;-1:-1:-1;2100:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2126:9:6;:14;;-1:-1:-1;;2126:14:6;2138:2;2126:14;;;-1:-1:-1;1345:9437:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1345:9437:6;;;-1:-1:-1;1345:9437:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103f9565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610402565b6101736004803603602081101561021b57600080fd5b50356001600160a01b0316610450565b6100b661046b565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104cc565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610534565b610173600480360360408110156102a157600080fd5b506001600160a01b0381358116916020013516610548565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610573565b8484610577565b50600192915050565b60025490565b600061037f848484610663565b6103ef8461038b610573565b6103ea85604051806060016040528060288152602001610927602891396001600160a01b038a166000908152600160205260408120906103c9610573565b6001600160a01b0316815260208101919091526040016000205491906107be565b610577565b5060019392505050565b60055460ff1690565b600061036361040f610573565b846103ea8560016000610420610573565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610855565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104d9610573565b846103ea856040518060600160405280602581526020016109986025913960016000610503610573565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906107be565b6000610363610541610573565b8484610663565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105bc5760405162461bcd60e51b81526004018080602001828103825260248152602001806109746024913960400191505060405180910390fd5b6001600160a01b0382166106015760405162461bcd60e51b81526004018080602001828103825260228152602001806108df6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106a85760405162461bcd60e51b815260040180806020018281038252602581526020018061094f6025913960400191505060405180910390fd5b6001600160a01b0382166106ed5760405162461bcd60e51b81526004018080602001828103825260238152602001806108bc6023913960400191505060405180910390fd5b6106f88383836108b6565b61073581604051806060016040528060268152602001610901602691396001600160a01b03861660009081526020819052604090205491906107be565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546107649082610855565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561084d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108125781810151838201526020016107fa565b50505050905090810190601f16801561083f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122035c4adeddc822f673f0d677bc56a91f242a3530b307e9f24122d4b607a2d790564736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3F9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x402 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x450 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x46B JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4CC JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x534 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x548 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x573 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x577 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH2 0x3EF DUP5 PUSH2 0x38B PUSH2 0x573 JUMP JUMPDEST PUSH2 0x3EA DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x927 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7BE JUMP JUMPDEST PUSH2 0x577 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x40F PUSH2 0x573 JUMP JUMPDEST DUP5 PUSH2 0x3EA DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x420 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x855 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4D9 PUSH2 0x573 JUMP JUMPDEST DUP5 PUSH2 0x3EA DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x998 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x503 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7BE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x541 PUSH2 0x573 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x974 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x601 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DF PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x94F PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8BC PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F8 DUP4 DUP4 DUP4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x735 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x901 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7BE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH2 0x855 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x84D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x812 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7FA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x83F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x735822122035C4 0xAD 0xED 0xDC DUP3 0x2F PUSH8 0x3F0D677BC56A91F2 TIMESTAMP LOG3 MSTORE8 SIGNEXTEND ADDRESS PUSH31 0x9F24122D4B607A2D790564736F6C6343000701003300000000000000000000 ",
              "sourceMap": "1345:9437:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4248:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4248:166:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3255:98;;;:::i;:::-;;;;;;;;;;;;;;;;4874:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4874:317:6;;;;;;;;;;;;;;;;;:::i;3114:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5586:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5586:215:6;;;;;;;;:::i;3411:117::-;;;;;;;;;;;;;;;;-1:-1:-1;3411:117:6;-1:-1:-1;;;;;3411:117:6;;:::i;2406:85::-;;;:::i;6288:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6288:266:6;;;;;;;;:::i;3731:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3731:172:6;;;;;;;;:::i;3961:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3961:149:6;;;;;;;;;;:::i;2212:81::-;2281:5;2274:12;;;;;;;;-1:-1:-1;;2274:12:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2249:13;;2274:12;;2281:5;;2274:12;;2281:5;2274:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81;:::o;4248:166::-;4331:4;4347:39;4356:12;:10;:12::i;:::-;4370:7;4379:6;4347:8;:39::i;:::-;-1:-1:-1;4403:4:6;4248:166;;;;:::o;3255:98::-;3334:12;;3255:98;:::o;4874:317::-;4980:4;4996:36;5006:6;5014:9;5025:6;4996:9;:36::i;:::-;5042:121;5051:6;5059:12;:10;:12::i;:::-;5073:89;5111:6;5073:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5073:19:6;;;;;;:11;:19;;;;;;5093:12;:10;:12::i;:::-;-1:-1:-1;;;;;5073:33:6;;;;;;;;;;;;-1:-1:-1;5073:33:6;;;:89;:37;:89::i;:::-;5042:8;:121::i;:::-;-1:-1:-1;5180:4:6;4874:317;;;;;:::o;3114:81::-;3179:9;;;;3114:81;:::o;5586:215::-;5674:4;5690:83;5699:12;:10;:12::i;:::-;5713:7;5722:50;5761:10;5722:11;:25;5734:12;:10;:12::i;:::-;-1:-1:-1;;;;;5722:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;5722:25:6;;;:34;;;;;;;;;;;:38;:50::i;3411:117::-;-1:-1:-1;;;;;3503:18:6;3477:7;3503:18;;;;;;;;;;;;3411:117::o;2406:85::-;2477:7;2470:14;;;;;;;;-1:-1:-1;;2470:14:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2445:13;;2470:14;;2477:7;;2470:14;;2477:7;2470:14;;;;;;;;;;;;;;;;;;;;;;;;6288:266;6381:4;6397:129;6406:12;:10;:12::i;:::-;6420:7;6429:96;6468:15;6429:96;;;;;;;;;;;;;;;;;:11;:25;6441:12;:10;:12::i;:::-;-1:-1:-1;;;;;6429:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;6429:25:6;;;:34;;;;;;;;;;;:96;:38;:96::i;3731:172::-;3817:4;3833:42;3843:12;:10;:12::i;:::-;3857:9;3868:6;3833:9;:42::i;3961:149::-;-1:-1:-1;;;;;4076:18:6;;;4050:7;4076:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3961:149::o;590:104:0:-;677:10;590:104;:::o;9350:340:6:-;-1:-1:-1;;;;;9451:19:6;;9443:68;;;;-1:-1:-1;;;9443:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9529:21:6;;9521:68;;;;-1:-1:-1;;;9521:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9600:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9651:32;;;;;;;;;;;;;;;;;9350:340;;;:::o;7028:530::-;-1:-1:-1;;;;;7133:20:6;;7125:70;;;;-1:-1:-1;;;7125:70:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7213:23:6;;7205:71;;;;-1:-1:-1;;;7205:71:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7287:47;7308:6;7316:9;7327:6;7287:20;:47::i;:::-;7365:71;7387:6;7365:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7365:17:6;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7345:17:6;;;:9;:17;;;;;;;;;;;:91;;;;7469:20;;;;;;;:32;;7494:6;7469:24;:32::i;:::-;-1:-1:-1;;;;;7446:20:6;;;:9;:20;;;;;;;;;;;;:55;;;;7516:35;;;;;;;7446:20;;7516:35;;;;;;;;;;;;;7028:530;;;:::o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:5;;;1746:187::o;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;10688:92:6:-;;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "509200",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "1360",
                "approve(address,uint256)": "infinite",
                "balanceOf(address)": "1167",
                "decimals()": "1102",
                "decreaseAllowance(address,uint256)": "infinite",
                "increaseAllowance(address,uint256)": "infinite",
                "name()": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "1043",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite"
              },
              "internal": {
                "_approve(address,address,uint256)": "infinite",
                "_beforeTokenTransfer(address,address,uint256)": "15",
                "_burn(address,uint256)": "infinite",
                "_mint(address,uint256)": "infinite",
                "_setupDecimals(uint8)": "infinite",
                "_transfer(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../../GSN/Context.sol\\\";\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n    using SafeMath for uint256;\\n    using Address for address;\\n\\n    mapping (address => uint256) private _balances;\\n\\n    mapping (address => mapping (address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n    uint8 private _decimals;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n     * a default value of 18.\\n     *\\n     * To select a different value for {decimals}, use {_setupDecimals}.\\n     *\\n     * All three of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor (string memory name, string memory symbol) {\\n        _name = name;\\n        _symbol = symbol;\\n        _decimals = 18;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n     * called.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20};\\n     *\\n     * Requirements:\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\\n     *\\n     * This is internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        _balances[sender] = _balances[sender].sub(amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        _balances[recipient] = _balances[recipient].add(amount);\\n        emit Transfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `to` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply = _totalSupply.add(amount);\\n        _balances[account] = _balances[account].add(amount);\\n        emit Transfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        _balances[account] = _balances[account].sub(amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        _totalSupply = _totalSupply.sub(amount);\\n        emit Transfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Sets {decimals} to a value other than the default one of 18.\\n     *\\n     * WARNING: This function should only be called from the constructor. Most\\n     * applications that interact with token contracts will not expect\\n     * {decimals} to ever change, and may work incorrectly if it does.\\n     */\\n    function _setupDecimals(uint8 decimals_) internal {\\n        _decimals = decimals_;\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be to transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\\n}\\n\",\"keccak256\":\"0xf1ac0ee2ca2b36f90574d3b2b37422ced4fa829741d80794c62f5958a2d8f474\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 590,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 596,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 598,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 600,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 602,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              },
              {
                "astId": 604,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_decimals",
                "offset": 0,
                "slot": "5",
                "type": "t_uint8"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint8": {
                "encoding": "inplace",
                "label": "uint8",
                "numberOfBytes": "1"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Interface of the ERC20 standard as defined in the EIP.",
            "events": {
              "Approval(address,address,uint256)": {
                "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
              },
              "Transfer(address,address,uint256)": {
                "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
              }
            },
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
              },
              "approve(address,uint256)": {
                "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "Address": {
          "abi": [],
          "devdoc": {
            "details": "Collection of functions related to the address type",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122092dcd43c3a239147403db10d22768b6a4fc768502983d4e22a546751d51ee7f964736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP3 0xDC 0xD4 EXTCODECOPY GASPRICE 0x23 SWAP2 SELFBALANCE BLOCKHASH RETURNDATASIZE 0xB1 0xD 0x22 PUSH23 0x8B6A4FC768502983D4E22A546751D51EE7F964736F6C63 NUMBER STOP SMOD ADD STOP CALLER ",
              "sourceMap": "126:5951:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122092dcd43c3a239147403db10d22768b6a4fc768502983d4e22a546751d51ee7f964736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP3 0xDC 0xD4 EXTCODECOPY GASPRICE 0x23 SWAP2 SELFBALANCE BLOCKHASH RETURNDATASIZE 0xB1 0xD 0x22 PUSH23 0x8B6A4FC768502983D4E22A546751D51EE7F964736F6C63 NUMBER STOP SMOD ADD STOP CALLER ",
              "sourceMap": "126:5951:8:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "_functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
                "functionCall(address,bytes memory)": "infinite",
                "functionCall(address,bytes memory,string memory)": "infinite",
                "functionCallWithValue(address,bytes memory,uint256)": "infinite",
                "functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
                "isContract(address)": "infinite",
                "sendValue(address payable,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/Create2.sol": {
        "Create2": {
          "abi": [],
          "devdoc": {
            "details": "Helper to make usage of the `CREATE2` EVM opcode easier and safer. `CREATE2` can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more information.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209e2bff077a274bb4fc010950b679e55df912fe48f6fb712bff988bec0486c44464736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x2B SELFDESTRUCT SMOD PUSH27 0x274BB4FC010950B679E55DF912FE48F6FB712BFF988BEC0486C444 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "426:2012:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209e2bff077a274bb4fc010950b679e55df912fe48f6fb712bff988bec0486c44464736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x2B SELFDESTRUCT SMOD PUSH27 0x274BB4FC010950B679E55DF912FE48F6FB712BFF988BEC0486C444 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "426:2012:9:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "computeAddress(bytes32,bytes32)": "infinite",
                "computeAddress(bytes32,bytes32,address)": "infinite",
                "deploy(uint256,bytes32,bytes memory)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper to make usage of the `CREATE2` EVM opcode easier and safer. `CREATE2` can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more information.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Create2.sol\":\"Create2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n    /**\\n     * @dev Deploys a contract using `CREATE2`. The address where the contract\\n     * will be deployed can be known in advance via {computeAddress}.\\n     *\\n     * The bytecode for a contract can be obtained from Solidity with\\n     * `type(contractName).creationCode`.\\n     *\\n     * Requirements:\\n     *\\n     * - `bytecode` must not be empty.\\n     * - `salt` must have not been used for `bytecode` already.\\n     * - the factory must have a balance of at least `amount`.\\n     * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n     */\\n    function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {\\n        address addr;\\n        require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n        require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n        }\\n        require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n        return addr;\\n    }\\n\\n    /**\\n     * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n     * `bytecodeHash` or `salt` will result in a new destination address.\\n     */\\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n        return computeAddress(salt, bytecodeHash, address(this));\\n    }\\n\\n    /**\\n     * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n     * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n     */\\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {\\n        bytes32 _data = keccak256(\\n            abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)\\n        );\\n        return address(uint256(_data));\\n    }\\n}\\n\",\"keccak256\":\"0x539295edd21ad514c0b1a0d1c89ada0831942f379ea83b6eb85769211fc7937e\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/CMCAdjudicator.sol": {
        "CMCAdjudicator": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                }
              ],
              "name": "ChannelDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "ChannelDisputed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedInitialState",
                  "type": "bytes"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "TransferDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "TransferDisputed",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "indices",
                  "type": "uint256[]"
                }
              ],
              "name": "defundChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedInitialTransferState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedTransferResolver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "responderSignature",
                  "type": "bytes"
                }
              ],
              "name": "defundTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "disputeChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "merkleProofData",
                  "type": "bytes32[]"
                }
              ],
              "name": "disputeTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChannelDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getDefundNonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "transferId",
                  "type": "bytes32"
                }
              ],
              "name": "getTransferDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              }
            },
            "title": "CMCAdjudicator",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b6080526139336100816000398061011252806103b8528061076452806107df52806108fd52806109a65280610eaf5280611024528061118c52806112d7528061135352806113c752806115cb528061165452806116dd528061177652806117f952506139336000f3fe6080604052600436106101025760003560e01c80636f33389e11610095578063e7283a8d11610064578063e7283a8d14610321578063e985256914610341578063eeb30fea14610361578063f19eb10e14610376578063f83d08ba1461039857610182565b80636f33389e14610294578063b081e9c8146102c1578063c60939be146102e1578063cefa51221461030157610182565b80634d3fcbda116100d15780634d3fcbda146102215780635bc9d96d146102415780635fd334d914610261578063635ae9011461028157610182565b8063072f25fd14610187578063241686a0146101a95780632d34ba79146101d45780633ff0da16146101f457610182565b3661018257306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101595760405162461bcd60e51b815260040161015090613614565b60405180910390fd5b60016000541461017b5760405162461bcd60e51b815260040161015090613407565b6001600055005b600080fd5b34801561019357600080fd5b506101a76101a2366004612730565b6103ad565b005b3480156101b557600080fd5b506101be610757565b6040516101cb9190612c29565b60405180910390f35b3480156101e057600080fd5b506101a76101ef366004612351565b6107d4565b34801561020057600080fd5b5061021461020f36600461241e565b6108ea565b6040516101cb919061372f565b34801561022d57600080fd5b506101a761023c3660046125cb565b61099b565b34801561024d57600080fd5b506101a761025c366004612389565b610ea4565b34801561026d57600080fd5b506101a761027c3660046126dc565b611019565b6101a761028f3660046123d3565b611181565b3480156102a057600080fd5b506102b46102af366004612335565b6112ca565b6040516101cb9190613752565b3480156102cd57600080fd5b506102b46102dc366004612335565b611346565b3480156102ed57600080fd5b506101a76102fc36600461265c565b6113bc565b34801561030d57600080fd5b506102b461031c366004612335565b6115be565b34801561032d57600080fd5b506102b461033c366004612335565b611647565b34801561034d57600080fd5b506102b461035c366004612351565b6116d0565b34801561036d57600080fd5b506101be611769565b34801561038257600080fd5b5061038b6117e6565b6040516101cb91906136d3565b3480156103a457600080fd5b506102b461188e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156103f65760405162461bcd60e51b815260040161015090613614565b6001600054146104185760405162461bcd60e51b815260040161015090613407565b6002600055863061042c6020830183612335565b6001600160a01b0316146104525760405162461bcd60e51b815260040161015090612f9b565b6020808901356000908152600c9091526040902060018101546104875760405162461bcd60e51b815260040161015090613356565b80546104928a611894565b146104af5760405162461bcd60e51b815260040161015090613680565b600281015460ff16156104d45760405162461bcd60e51b8152600401610150906130e3565b60028101805460ff191660011790556104eb6121e6565b81600101544210156106d357896101600135898960405161050d929190612bc9565b6040518091039020146105325760405162461bcd60e51b815260040161015090613680565b61054260a08b0160808c01612335565b6001600160a01b0316336001600160a01b031614806105b357506105b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a69250505060a08d0160808e01612335565b6101608d013591906118c4565b6105cf5760405162461bcd60e51b8152600401610150906135df565b60006105e160608c0160408d01612335565b9050806001600160a01b0316638ef98a7e8c60c00160405160200161060691906136c5565b6040516020818303038152906040528c8c8c8c6040518663ffffffff1660e01b8152600401610639959493929190612e15565b60806040518083038186803b15801561065157600080fd5b505afa158015610665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106899190612508565b915061069d60c08c013560e08d01356118ec565b8251602081015190516106af916118ec565b11156106cd5760405162461bcd60e51b81526004016101509061364b565b506106e8565b6106e5368b90038b0160c08c01612436565b90505b6107016106fb60c08c0160a08d01612335565b82611918565b7f93f6b8187e81bd7d01ce234c043cd6ae4feda2e2ae91daae0962c68a656da8c7338b848c8c8c8c8860405161073e989796959493929190612cef565b60405180910390a1505060016000555050505050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107a25760405162461bcd60e51b815260040161015090613614565b6001600054146107c45760405162461bcd60e51b815260040161015090613407565b506002546001600160a01b031690565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561081d5760405162461bcd60e51b815260040161015090613614565b6001546001600160a01b0316156108465760405162461bcd60e51b81526004016101509061352b565b6001600160a01b0382161580159061086657506001600160a01b03811615155b6108825760405162461bcd60e51b815260040161015090613224565b806001600160a01b0316826001600160a01b031614156108b45760405162461bcd60e51b815260040161015090612fd0565b6108bc61196e565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6108f261220b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561093b5760405162461bcd60e51b815260040161015090613614565b60016000541461095d5760405162461bcd60e51b815260040161015090613407565b506000908152600c60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109e45760405162461bcd60e51b815260040161015090613614565b600160005414610a065760405162461bcd60e51b815260040161015090613407565b60026000558430610a1a6020830183612335565b6001600160a01b0316148015610a5257506001546001600160a01b0316610a476040830160208401612335565b6001600160a01b0316145b8015610a8057506002546001600160a01b0316610a756060830160408401612335565b6001600160a01b0316145b610a9c5760405162461bcd60e51b815260040161015090613163565b83610ab95760405162461bcd60e51b81526004016101509061312c565b83821115610ad95760405162461bcd60e51b81526004016101509061355b565b600654610ae587611975565b14610b025760405162461bcd60e51b815260040161015090612eb2565b610b0a611988565b610b265760405162461bcd60e51b815260040161015090612f64565b60005b84811015610e56576000868683818110610b3f57fe5b9050602002016020810190610b549190612335565b9050600084831015610bd957858584818110610b6c57fe5b905060200201359050888060600190610b85919061375b565b82818110610b8f57fe5b9050602002016020810190610ba49190612335565b6001600160a01b0316826001600160a01b031614610bd45760405162461bcd60e51b815260040161015090612ef6565b610c45565b5060005b610bea60608a018a61375b565b9050811015610c4557610c0060608a018a61375b565b82818110610c0a57fe5b9050602002016020810190610c1f9190612335565b6001600160a01b0316826001600160a01b03161415610c3d57610c45565b600101610bdd565b6000610c5460608b018b61375b565b90508214610c7f57610c6960e08b018b61375b565b83818110610c7357fe5b90506020020135610c82565b60015b6001600160a01b0384166000908152600b60205260409020549091508111610cbc5760405162461bcd60e51b8152600401610150906131dc565b6001600160a01b0383166000908152600b6020526040812091909155610ce1836119a5565b90506000610cee846119c0565b9050610cf86121e6565b610d0560608d018d61375b565b9050841415610d8f576040518060400160405280604051806040016040528086815260200185815250815260200160405180604001604052808f6020016020810190610d519190612335565b6001600160a01b03166001600160a01b031681526020018f6040016020810190610d7b9190612335565b6001600160a01b0316905290529050610e3b565b610d9c60808d018d6137a2565b85818110610da657fe5b905060800201803603810190610dbc9190612436565b9050610dfd610dce60a08e018e61375b565b86818110610dd857fe5b9050602002013584038260000151600060028110610df257fe5b6020020151906119f5565b815152610e34610e1060c08e018e61375b565b86818110610e1a57fe5b9050602002013583038260000151600160028110610df257fe5b8151602001525b610e458582611918565b505060019093019250610b29915050565b507f49cbb28c69ffbdb6b3893f83d64557662a5dd43ffd6045b6a5180ab0a027f224338760068888604051610e8f959493929190612c70565b60405180910390a15050600160005550505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610eed5760405162461bcd60e51b815260040161015090613614565b600160005414610f0f5760405162461bcd60e51b815260040161015090613407565b6002600055336001600160a01b0383161480610f3c5750806001600160a01b0316826001600160a01b0316145b610f585760405162461bcd60e51b8152600401610150906134f4565b6001600160a01b038084166000908152600460209081526040808320938616835292905290812054610f8b908590611a0e565b905060008111610fad5760405162461bcd60e51b815260040161015090613482565b6001600160a01b03808516600090815260046020908152604080832093871683529290522054610fdd9082611a22565b6001600160a01b0380861660009081526004602090815260408083209388168352929052205561100e848383611a64565b505060016000555050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110625760405162461bcd60e51b815260040161015090613614565b6001600054146110845760405162461bcd60e51b815260040161015090613407565b600260005582306110986020830183612335565b6001600160a01b0316146110be5760405162461bcd60e51b815260040161015090612f9b565b60006110c985611894565b90506110dc848460066002015484611a95565b6110e4611988565b6111005760405162461bcd60e51b815260040161015090612f64565b6020808601356000908152600c909152604090206001810154156111365760405162461bcd60e51b8152600401610150906134ab565b818155611148426101408801356118ec565b60018201556040517f87b348a76dd4ef431d45553a1d8c5934db960e64201a5776ab64e3eb397f4cfa90610e8f90339089908590612cc3565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111ca5760405162461bcd60e51b815260040161015090613614565b6001600054146111ec5760405162461bcd60e51b815260040161015090613407565b60026000556111fa82611af7565b156112235780341461121e5760405162461bcd60e51b81526004016101509061329c565b611269565b34156112415760405162461bcd60e51b815260040161015090613315565b61124d82333084611b04565b6112695760405162461bcd60e51b81526004016101509061325b565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906112b99084908490612dde565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156113155760405162461bcd60e51b815260040161015090613614565b6001600054146113375760405162461bcd60e51b815260040161015090613407565b611340826119a5565b92915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156113915760405162461bcd60e51b815260040161015090613614565b6001600054146113b35760405162461bcd60e51b815260040161015090613407565b611340826119c0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114055760405162461bcd60e51b815260040161015090613614565b6001600054146114275760405162461bcd60e51b815260040161015090613407565b6002600055843061143b6020830183612335565b6001600160a01b031614801561147357506001546001600160a01b03166114686040830160208401612335565b6001600160a01b0316145b80156114a157506002546001600160a01b03166114966060830160408401612335565b6001600160a01b0316145b6114bd5760405162461bcd60e51b815260040161015090613163565b60006114c887611975565b90506114d8878288888888611b57565b6114e0611988565b156114fd5760405162461bcd60e51b815260040161015090612f64565b600754610120880135116115235760405162461bcd60e51b815260040161015090613007565b61152b611c61565b61155f5761153e426101008901356118ec565b60095561155b6115546101008901356002611c69565b42906118ec565b600a555b60068181556101208801356007556101408801356008556040517fef03cf86f2e77e1a0ae5cb25b50519e55b94788b920ace71f92341df2dab97ed916115a89133918b91612c3d565b60405180910390a1505060016000555050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116095760405162461bcd60e51b815260040161015090613614565b60016000541461162b5760405162461bcd60e51b815260040161015090613407565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116925760405162461bcd60e51b815260040161015090613614565b6001600054146116b45760405162461bcd60e51b815260040161015090613407565b506001600160a01b03166000908152600b602052604090205490565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561171b5760405162461bcd60e51b815260040161015090613614565b60016000541461173d5760405162461bcd60e51b815260040161015090613407565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117b45760405162461bcd60e51b815260040161015090613614565b6001600054146117d65760405162461bcd60e51b815260040161015090613407565b506001546001600160a01b031690565b6117ee61222b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156118375760405162461bcd60e51b815260040161015090613614565b6001600054146118595760405162461bcd60e51b815260040161015090613407565b506040805160a08101825260065481526007546020820152600854918101919091526009546060820152600a54608082015290565b60005481565b6000816040516020016118a79190613720565b604051602081830303815290604052805190602001209050919050565b6000816001600160a01b03166118da8585611ca3565b6001600160a01b031614949350505050565b6000828201838110156119115760405162461bcd60e51b8152600401610150906130ac565b9392505050565b60005b6002811015611969578151600090826002811061193457fe5b60200201519050801561196057611960848460200151846002811061195557fe5b602002015183611cbb565b5060010161191b565b505050565b6001600055565b6000816040516020016118a7919061370d565b600042600660030154111580156119a05750600a5442105b905090565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b03811660009081526005602090815260408083205460039092528220546119ed84611d1c565b010392915050565b600082820183811015611911576000195b949350505050565b600061191182611a1d85611d1c565b611db3565b600061191183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dc9565b611a6e8382611df5565b611a79838383611e17565b6119695760405162461bcd60e51b81526004016101509061303e565b611ad5848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250859150611e409050565b611af15760405162461bcd60e51b81526004016101509061343e565b50505050565b6001600160a01b03161590565b6000611b4e85858585604051602401611b1f93929190612dba565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052611edd565b95945050505050565b60008086604051602001611b6c929190612e50565b604051602081830303815290604052805190602001209050611bd685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bce9250505060408a0160208b01612335565b8391906118c4565b611bf25760405162461bcd60e51b81526004016101509061359e565b611c3c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bce9250505060608a0160408b01612335565b611c585760405162461bcd60e51b815260040161015090613075565b50505050505050565b600954421090565b600082611c7857506000611340565b82820282848281611c8557fe5b04146119115760405162461bcd60e51b81526004016101509061339b565b600080611caf84611f8e565b9050611a068184611fa1565b6001600160a01b03808416600090815260046020908152604080832093861683529290522054611ceb90826119f5565b6001600160a01b03938416600090815260046020908152604080832095909616825293909352929091209190915550565b6000611d2782611af7565b611dac576040516370a0823160e01b81526001600160a01b038316906370a0823190611d57903090600401612c29565b60206040518083038186803b158015611d6f57600080fd5b505afa158015611d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da791906127dc565b611340565b5047919050565b6000818310611dc25781611911565b5090919050565b60008184841115611ded5760405162461bcd60e51b81526004016101509190612e68565b505050900390565b6001600160a01b03909116600090815260036020526040902080549091019055565b6000611e2284611af7565b611e3657611e318484846120cf565b611a06565b611a0683836120dc565b600081815b8551811015611ed2576000868281518110611e5c57fe5b60200260200101519050808311611e9d578281604051602001611e80929190612bbb565b604051602081830303815290604052805190602001209250611ec9565b8083604051602001611eb0929190612bbb565b6040516020818303038152906040528051906020012092505b50600101611e45565b509092149392505050565b6000611ee883612154565b611f045760405162461bcd60e51b8152600401610150906133dc565b60006060846001600160a01b031684604051611f209190612bd9565b6000604051808303816000865af19150503d8060008114611f5d576040519150601f19603f3d011682016040523d82523d6000602084013e611f62565b606091505b5091509150611f71828261218d565b80511580611b4e575080806020019051810190611b4e91906123fe565b6000816040516020016118a79190612bf5565b60008151604114611fc45760405162461bcd60e51b815260040161015090612f2d565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156120165760405162461bcd60e51b81526004016101509061319a565b8060ff16601b1415801561202e57508060ff16601c14155b1561204b5760405162461bcd60e51b8152600401610150906132d3565b6000600187838686604051600081526020016040526040516120709493929190612df7565b6020604051602081039080840390855afa158015612092573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120c55760405162461bcd60e51b815260040161015090612e7b565b9695505050505050565b6000611a0684848461219e565b6000806060846001600160a01b0316846040516120f890612c26565b60006040518083038185875af1925050503d8060008114612135576040519150601f19603f3d011682016040523d82523d6000602084013e61213a565b606091505b5091509150612149828261218d565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611a06575050151592915050565b8161219a57805160208201fd5b5050565b6000611a068484846040516024016121b7929190612dde565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052611edd565b60405180604001604052806121f9612259565b8152602001612206612259565b905290565b604080516060810182526000808252602082018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806002906020820280368337509192915050565b8035611340816138e5565b60008083601f840112612293578182fd5b50813567ffffffffffffffff8111156122aa578182fd5b60208301915083602080830285010111156122c457600080fd5b9250929050565b60008083601f8401126122dc578182fd5b50813567ffffffffffffffff8111156122f3578182fd5b6020830191508360208285010111156122c457600080fd5b6000610160828403121561231d578081fd5b50919050565b6000610180828403121561231d578081fd5b600060208284031215612346578081fd5b8135611911816138e5565b60008060408385031215612363578081fd5b823561236e816138e5565b9150602083013561237e816138e5565b809150509250929050565b60008060006060848603121561239d578081fd5b83356123a8816138e5565b925060208401356123b8816138e5565b915060408401356123c8816138e5565b809150509250925092565b600080604083850312156123e5578182fd5b82356123f0816138e5565b946020939093013593505050565b60006020828403121561240f578081fd5b81518015158114611911578182fd5b60006020828403121561242f578081fd5b5035919050565b600060808284031215612447578081fd5b61245160406137e9565b83601f84011261245f578182fd5b61246960406137e9565b8084604086018781111561247b578586fd5b855b600281101561249c57823585526020948501949092019160010161247d565b5082855287605f8801126124ae578586fd5b6124b860406137e9565b93508392509050608086018710156124ce578485fd5b845b60028110156124f95781356124e4816138e5565b845260209384019391909101906001016124d0565b50506020830152509392505050565b600060808284031215612519578081fd5b61252360406137e9565b83601f840112612531578182fd5b61253b60406137e9565b8084604086018781111561254d578586fd5b855b600281101561256e57825185526020948501949092019160010161254f565b5082855287605f880112612580578586fd5b61258a60406137e9565b93508392509050608086018710156125a0578485fd5b845b60028110156124f95781516125b6816138e5565b845260209384019391909101906001016125a2565b6000806000806000606086880312156125e2578283fd5b853567ffffffffffffffff808211156125f9578485fd5b61260589838a0161230b565b9650602088013591508082111561261a578485fd5b61262689838a01612282565b9096509450604088013591508082111561263e578283fd5b5061264b88828901612282565b969995985093965092949392505050565b600080600080600060608688031215612673578283fd5b853567ffffffffffffffff8082111561268a578485fd5b61269689838a0161230b565b965060208801359150808211156126ab578485fd5b6126b789838a016122cb565b909650945060408801359150808211156126cf578283fd5b5061264b888289016122cb565b60008060006101a084860312156126f1578081fd5b6126fb8585612323565b925061018084013567ffffffffffffffff811115612717578182fd5b61272386828701612282565b9497909650939450505050565b60008060008060008060006101e0888a03121561274b578485fd5b6127558989612323565b965061018088013567ffffffffffffffff80821115612772578687fd5b61277e8b838c016122cb565b90985096506101a08a0135915080821115612797578384fd5b6127a38b838c016122cb565b90965094506101c08a01359150808211156127bc578384fd5b506127c98a828b016122cb565b989b979a50959850939692959293505050565b6000602082840312156127ed578081fd5b5051919050565b6001600160a01b03169052565b60008284526020808501945082825b8581101561283e578135612823816138e5565b6001600160a01b031687529582019590820190600101612810565b509495945050505050565b60008284526020808501945082825b8581101561283e576040808389378781018581529083019085905b60028210156128a4578235612887816138e5565b6001600160a01b0316815291850191600191909101908501612873565b5050506080968701969190910190600101612858565b81835260006001600160fb1b038311156128d2578081fd5b6020830280836020870137939093016020019283525090919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526129308160208601602086016138b9565b601f01601f19169290920160200192915050565b604081833760006040838101828152908301915b6002811015612989576020833561296e816138e5565b6001600160a01b031683529283019290910190600101612958565b5050505050565b8054825260018101546020830152600281015460408301526003810154606083015260040154608090910152565b6000610160602083016129da856129d58387612277565b6127f4565b6129e48185613810565b90506129f360208601826127f4565b50612a016040840184613810565b612a0e60408601826127f4565b50612a1c606084018461381d565b826060870152612a2f8387018284612801565b92505050612a406080840184613865565b8583036080870152612a53838284612849565b92505050612a6460a084018461381d565b85830360a0870152612a778382846128ba565b92505050612a8860c084018461381d565b85830360c0870152612a9b8382846128ba565b92505050612aac60e084018461381d565b85830360e0870152612abf8382846128ba565b6101008681013590880152610120808701359088015261014095860135959096019490945250929392505050565b8035612af8816138e5565b6001600160a01b03908116835260208281013590840152604082013590612b1e826138e5565b166040830152612b316060820182613810565b612b3e60608401826127f4565b50612b4c6080820182613810565b612b5960808401826127f4565b50612b6760a0820182613810565b612b7460a08401826127f4565b50612b8560c0830160c08301612944565b610140818101359083015261016090810135910152565b80548252600181015460208301526002015460ff161515604090910152565b918252602082015260400190565b6000828483379101908152919050565b60008251612beb8184602087016138b9565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260e060208201819052600090612c61908301856129be565b9050611a066040830184612990565b6001600160a01b038616815261010060208201819052600090612c95838201886129be565b9050612ca46040840187612990565b82810360e0840152612cb7818587612801565b98975050505050505050565b6001600160a01b03841681526102008101612ce16020830185612aed565b611a066101a0830184612b9c565b6001600160a01b038916815260006102c06020612d0e8185018c612aed565b612d1c6101a085018b612b9c565b81610200850152612d30828501898b6128ee565b9150838203610220850152612d468287896128ee565b85519093509150600061024085015b6002821015612d74578351815292820192600191909101908201612d55565b5050808501519150610280840160005b6002811015612da957612d9784516138ad565b82529282019290820190600101612d84565b505050509998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b600060608252612e286060830188612918565b8281036020840152612e3b8187896128ee565b90508281036040840152612cb78185876128ee565b6040810160028410612e5e57fe5b9281526020015290565b6000602082526119116020830184612918565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f60408201526309082a6960e31b606082015260800190565b6020808252601e908201527f434d4341646a7564696361746f723a20494e4445585f4d49534d415443480000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f5048415345000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345000000604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f424f425f53494700604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11151955391115160ba1b606082015260800190565b6020808252601f908201527f434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e00604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c00604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526028908201527f434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f604082015267111151955391115160c21b606082015260800190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b60208082526025908201527f434d4341646a7564696361746f723a205452414e534645525f4e4f545f444953604082015264141555115160da1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f506040820152632927a7a360e11b606082015260800190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11254d41555115160ba1b606082015260800190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b60208082526023908201527f434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e4760408201526254485360e81b606082015260800190565b60208082526021908201527f434d4341646a7564696361746f723a20494e56414c49445f414c4943455f53496040820152604760f81b606082015260800190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553604082015260600190565b60208082526025908201527f434d4341646a7564696361746f723a20494e56414c49445f5452414e534645526040820152640be9082a6960db1b606082015260800190565b608081016113408284612944565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60006020825261191160208301846129be565b61018081016113408284612aed565b815181526020808301519082015260409182015115159181019190915260600190565b90815260200190565b6000808335601e19843603018112613771578283fd5b83018035915067ffffffffffffffff82111561378b578283fd5b60209081019250810236038213156122c457600080fd5b6000808335601e198436030181126137b8578283fd5b83018035915067ffffffffffffffff8211156137d2578283fd5b60200191506080810236038213156122c457600080fd5b60405181810167ffffffffffffffff8111828210171561380857600080fd5b604052919050565b60008235611911816138e5565b6000808335601e19843603018112613833578283fd5b830160208101925035905067ffffffffffffffff81111561385357600080fd5b6020810236038313156122c457600080fd5b6000808335601e1984360301811261387b578283fd5b830160208101925035905067ffffffffffffffff81111561389b57600080fd5b6080810236038313156122c457600080fd5b6001600160a01b031690565b60005b838110156138d45781810151838201526020016138bc565b83811115611af15750506000910152565b6001600160a01b03811681146138fa57600080fd5b5056fea2646970667358221220b11a8d2c1bcb4d9ebac97cf7150053b4210e8074be283e3142b6aef9836dc99664736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0x3933 PUSH2 0x81 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x112 MSTORE DUP1 PUSH2 0x3B8 MSTORE DUP1 PUSH2 0x764 MSTORE DUP1 PUSH2 0x7DF MSTORE DUP1 PUSH2 0x8FD MSTORE DUP1 PUSH2 0x9A6 MSTORE DUP1 PUSH2 0xEAF MSTORE DUP1 PUSH2 0x1024 MSTORE DUP1 PUSH2 0x118C MSTORE DUP1 PUSH2 0x12D7 MSTORE DUP1 PUSH2 0x1353 MSTORE DUP1 PUSH2 0x13C7 MSTORE DUP1 PUSH2 0x15CB MSTORE DUP1 PUSH2 0x1654 MSTORE DUP1 PUSH2 0x16DD MSTORE DUP1 PUSH2 0x1776 MSTORE DUP1 PUSH2 0x17F9 MSTORE POP PUSH2 0x3933 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x102 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F33389E GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xE7283A8D GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE7283A8D EQ PUSH2 0x321 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0xF19EB10E EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x398 JUMPI PUSH2 0x182 JUMP JUMPDEST DUP1 PUSH4 0x6F33389E EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0xC60939BE EQ PUSH2 0x2E1 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x301 JUMPI PUSH2 0x182 JUMP JUMPDEST DUP1 PUSH4 0x4D3FCBDA GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x4D3FCBDA EQ PUSH2 0x221 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0x5FD334D9 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x281 JUMPI PUSH2 0x182 JUMP JUMPDEST DUP1 PUSH4 0x72F25FD EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x241686A0 EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x3FF0DA16 EQ PUSH2 0x1F4 JUMPI PUSH2 0x182 JUMP JUMPDEST CALLDATASIZE PUSH2 0x182 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x159 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x17B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2730 JUMP JUMPDEST PUSH2 0x3AD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0x757 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x2C29 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x1EF CALLDATASIZE PUSH1 0x4 PUSH2 0x2351 JUMP JUMPDEST PUSH2 0x7D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x20F CALLDATASIZE PUSH1 0x4 PUSH2 0x241E JUMP JUMPDEST PUSH2 0x8EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x372F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x25CB JUMP JUMPDEST PUSH2 0x99B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x2389 JUMP JUMPDEST PUSH2 0xEA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x26DC JUMP JUMPDEST PUSH2 0x1019 JUMP JUMPDEST PUSH2 0x1A7 PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x23D3 JUMP JUMPDEST PUSH2 0x1181 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x2AF CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x12CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x3752 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x2DC CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x1346 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x2FC CALLDATASIZE PUSH1 0x4 PUSH2 0x265C JUMP JUMPDEST PUSH2 0x13BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x15BE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x33C CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x1647 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0x2351 JUMP JUMPDEST PUSH2 0x16D0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0x1769 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x38B PUSH2 0x17E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x36D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x188E JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x418 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP7 ADDRESS PUSH2 0x42C PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x452 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3356 JUMP JUMPDEST DUP1 SLOAD PUSH2 0x492 DUP11 PUSH2 0x1894 JUMP JUMPDEST EQ PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3680 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x4D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x30E3 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x4EB PUSH2 0x21E6 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x6D3 JUMPI DUP10 PUSH2 0x160 ADD CALLDATALOAD DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0x50D SWAP3 SWAP2 SWAP1 PUSH2 0x2BC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 EQ PUSH2 0x532 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3680 JUMP JUMPDEST PUSH2 0x542 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x5B3 JUMPI POP PUSH2 0x5B3 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x5A6 SWAP3 POP POP POP PUSH1 0xA0 DUP14 ADD PUSH1 0x80 DUP15 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x160 DUP14 ADD CALLDATALOAD SWAP2 SWAP1 PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5E1 PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x2335 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8EF98A7E DUP13 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x606 SWAP2 SWAP1 PUSH2 0x36C5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x639 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E15 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x651 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x665 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x689 SWAP2 SWAP1 PUSH2 0x2508 JUMP JUMPDEST SWAP2 POP PUSH2 0x69D PUSH1 0xC0 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP14 ADD CALLDATALOAD PUSH2 0x18EC JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x6AF SWAP2 PUSH2 0x18EC JUMP JUMPDEST GT ISZERO PUSH2 0x6CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x364B JUMP JUMPDEST POP PUSH2 0x6E8 JUMP JUMPDEST PUSH2 0x6E5 CALLDATASIZE DUP12 SWAP1 SUB DUP12 ADD PUSH1 0xC0 DUP13 ADD PUSH2 0x2436 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x701 PUSH2 0x6FB PUSH1 0xC0 DUP13 ADD PUSH1 0xA0 DUP14 ADD PUSH2 0x2335 JUMP JUMPDEST DUP3 PUSH2 0x1918 JUMP JUMPDEST PUSH32 0x93F6B8187E81BD7D01CE234C043CD6AE4FEDA2E2AE91DAAE0962C68A656DA8C7 CALLER DUP12 DUP5 DUP13 DUP13 DUP13 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x73E SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2CEF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x81D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x846 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x352B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x866 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x882 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3224 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2FD0 JUMP JUMPDEST PUSH2 0x8BC PUSH2 0x196E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x8F2 PUSH2 0x220B JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x93B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xA06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0xA1A PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xA52 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA47 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0xA80 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA75 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xA9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3163 JUMP JUMPDEST DUP4 PUSH2 0xAB9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x312C JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x355B JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0xAE5 DUP8 PUSH2 0x1975 JUMP JUMPDEST EQ PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2EB2 JUMP JUMPDEST PUSH2 0xB0A PUSH2 0x1988 JUMP JUMPDEST PUSH2 0xB26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xE56 JUMPI PUSH1 0x0 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0xB3F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB54 SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP4 LT ISZERO PUSH2 0xBD9 JUMPI DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xB6C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 POP DUP9 DUP1 PUSH1 0x60 ADD SWAP1 PUSH2 0xB85 SWAP2 SWAP1 PUSH2 0x375B JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xB8F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xBA4 SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xBD4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2EF6 JUMP JUMPDEST PUSH2 0xC45 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH2 0xBEA PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x375B JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0xC45 JUMPI PUSH2 0xC00 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x375B JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xC0A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xC1F SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xC3D JUMPI PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xBDD JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC54 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x375B JUMP JUMPDEST SWAP1 POP DUP3 EQ PUSH2 0xC7F JUMPI PUSH2 0xC69 PUSH1 0xE0 DUP12 ADD DUP12 PUSH2 0x375B JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0xC73 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT PUSH2 0xCBC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x31DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xCE1 DUP4 PUSH2 0x19A5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xCEE DUP5 PUSH2 0x19C0 JUMP JUMPDEST SWAP1 POP PUSH2 0xCF8 PUSH2 0x21E6 JUMP JUMPDEST PUSH2 0xD05 PUSH1 0x60 DUP14 ADD DUP14 PUSH2 0x375B JUMP JUMPDEST SWAP1 POP DUP5 EQ ISZERO PUSH2 0xD8F JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP16 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xD51 SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 PUSH1 0x40 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xD7B SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE SWAP1 MSTORE SWAP1 POP PUSH2 0xE3B JUMP JUMPDEST PUSH2 0xD9C PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x37A2 JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0xDA6 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x80 MUL ADD DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xDBC SWAP2 SWAP1 PUSH2 0x2436 JUMP JUMPDEST SWAP1 POP PUSH2 0xDFD PUSH2 0xDCE PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x375B JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0xDD8 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP5 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xDF2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x19F5 JUMP JUMPDEST DUP2 MLOAD MSTORE PUSH2 0xE34 PUSH2 0xE10 PUSH1 0xC0 DUP15 ADD DUP15 PUSH2 0x375B JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0xE1A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xDF2 JUMPI INVALID JUMPDEST DUP2 MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST PUSH2 0xE45 DUP6 DUP3 PUSH2 0x1918 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0xB29 SWAP2 POP POP JUMP JUMPDEST POP PUSH32 0x49CBB28C69FFBDB6B3893F83D64557662A5DD43FFD6045B6A5180AB0A027F224 CALLER DUP8 PUSH1 0x6 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0xE8F SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xEED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xF0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0xF3C JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xF58 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x34F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0xF8B SWAP1 DUP6 SWAP1 PUSH2 0x1A0E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xFAD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3482 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0xFDD SWAP1 DUP3 PUSH2 0x1A22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x100E DUP5 DUP4 DUP4 PUSH2 0x1A64 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1062 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1084 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP3 ADDRESS PUSH2 0x1098 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x10BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10C9 DUP6 PUSH2 0x1894 JUMP JUMPDEST SWAP1 POP PUSH2 0x10DC DUP5 DUP5 PUSH1 0x6 PUSH1 0x2 ADD SLOAD DUP5 PUSH2 0x1A95 JUMP JUMPDEST PUSH2 0x10E4 PUSH2 0x1988 JUMP JUMPDEST PUSH2 0x1100 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0x1136 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x34AB JUMP JUMPDEST DUP2 DUP2 SSTORE PUSH2 0x1148 TIMESTAMP PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH2 0x18EC JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0x87B348A76DD4EF431D45553A1D8C5934DB960E64201A5776AB64E3EB397F4CFA SWAP1 PUSH2 0xE8F SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP6 SWAP1 PUSH2 0x2CC3 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x11CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x11EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x11FA DUP3 PUSH2 0x1AF7 JUMP JUMPDEST ISZERO PUSH2 0x1223 JUMPI DUP1 CALLVALUE EQ PUSH2 0x121E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x329C JUMP JUMPDEST PUSH2 0x1269 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x1241 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3315 JUMP JUMPDEST PUSH2 0x124D DUP3 CALLER ADDRESS DUP5 PUSH2 0x1B04 JUMP JUMPDEST PUSH2 0x1269 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x325B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x12B9 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x2DDE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1315 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1337 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH2 0x1340 DUP3 PUSH2 0x19A5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1391 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x13B3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH2 0x1340 DUP3 PUSH2 0x19C0 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1405 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1427 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x143B PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x1473 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1468 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x14A1 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1496 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x14BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3163 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C8 DUP8 PUSH2 0x1975 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D8 DUP8 DUP3 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1B57 JUMP JUMPDEST PUSH2 0x14E0 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0x14FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x120 DUP9 ADD CALLDATALOAD GT PUSH2 0x1523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3007 JUMP JUMPDEST PUSH2 0x152B PUSH2 0x1C61 JUMP JUMPDEST PUSH2 0x155F JUMPI PUSH2 0x153E TIMESTAMP PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH2 0x18EC JUMP JUMPDEST PUSH1 0x9 SSTORE PUSH2 0x155B PUSH2 0x1554 PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH1 0x2 PUSH2 0x1C69 JUMP JUMPDEST TIMESTAMP SWAP1 PUSH2 0x18EC JUMP JUMPDEST PUSH1 0xA SSTORE JUMPDEST PUSH1 0x6 DUP2 DUP2 SSTORE PUSH2 0x120 DUP9 ADD CALLDATALOAD PUSH1 0x7 SSTORE PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEF03CF86F2E77E1A0AE5CB25B50519E55B94788B920ACE71F92341DF2DAB97ED SWAP2 PUSH2 0x15A8 SWAP2 CALLER SWAP2 DUP12 SWAP2 PUSH2 0x2C3D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1609 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x162B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1692 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x16B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x171B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x173D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x17B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x17D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x17EE PUSH2 0x222B JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1859 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x6 SLOAD DUP2 MSTORE PUSH1 0x7 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x8 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x9 SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x18DA DUP6 DUP6 PUSH2 0x1CA3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x30AC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1969 JUMPI DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 PUSH1 0x2 DUP2 LT PUSH2 0x1934 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 POP DUP1 ISZERO PUSH2 0x1960 JUMPI PUSH2 0x1960 DUP5 DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x2 DUP2 LT PUSH2 0x1955 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x1CBB JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x191B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x370D JUMP JUMPDEST PUSH1 0x0 TIMESTAMP PUSH1 0x6 PUSH1 0x3 ADD SLOAD GT ISZERO DUP1 ISZERO PUSH2 0x19A0 JUMPI POP PUSH1 0xA SLOAD TIMESTAMP LT JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0x19ED DUP5 PUSH2 0x1D1C JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1911 JUMPI PUSH1 0x0 NOT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1911 DUP3 PUSH2 0x1A1D DUP6 PUSH2 0x1D1C JUMP JUMPDEST PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1911 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x1DC9 JUMP JUMPDEST PUSH2 0x1A6E DUP4 DUP3 PUSH2 0x1DF5 JUMP JUMPDEST PUSH2 0x1A79 DUP4 DUP4 DUP4 PUSH2 0x1E17 JUMP JUMPDEST PUSH2 0x1969 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x303E JUMP JUMPDEST PUSH2 0x1AD5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x1E40 SWAP1 POP JUMP JUMPDEST PUSH2 0x1AF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x343E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B4E DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1B1F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2DBA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1EDD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B6C SWAP3 SWAP2 SWAP1 PUSH2 0x2E50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1BD6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1BCE SWAP3 POP POP POP PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x2335 JUMP JUMPDEST DUP4 SWAP2 SWAP1 PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x1BF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x359E JUMP JUMPDEST PUSH2 0x1C3C DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1BCE SWAP3 POP POP POP PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x1C58 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3075 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD TIMESTAMP LT SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1C78 JUMPI POP PUSH1 0x0 PUSH2 0x1340 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1C85 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x339B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CAF DUP5 PUSH2 0x1F8E JUMP JUMPDEST SWAP1 POP PUSH2 0x1A06 DUP2 DUP5 PUSH2 0x1FA1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1CEB SWAP1 DUP3 PUSH2 0x19F5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP7 AND DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D27 DUP3 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x1DAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D57 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x2C29 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DA7 SWAP2 SWAP1 PUSH2 0x27DC JUMP JUMPDEST PUSH2 0x1340 JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1DC2 JUMPI DUP2 PUSH2 0x1911 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x1DED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0x2E68 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E22 DUP5 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x1E36 JUMPI PUSH2 0x1E31 DUP5 DUP5 DUP5 PUSH2 0x20CF JUMP JUMPDEST PUSH2 0x1A06 JUMP JUMPDEST PUSH2 0x1A06 DUP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x1ED2 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E5C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E9D JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1E80 SWAP3 SWAP2 SWAP1 PUSH2 0x2BBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x1EC9 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1EB0 SWAP3 SWAP2 SWAP1 PUSH2 0x2BBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1E45 JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EE8 DUP4 PUSH2 0x2154 JUMP JUMPDEST PUSH2 0x1F04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x33DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x1F20 SWAP2 SWAP1 PUSH2 0x2BD9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1F5D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F62 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1F71 DUP3 DUP3 PUSH2 0x218D JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B4E JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B4E SWAP2 SWAP1 PUSH2 0x23FE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x2BF5 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x1FC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F2D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x2016 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x319A JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x202E JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x204B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2070 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2DF7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2092 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2E7B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A06 DUP5 DUP5 DUP5 PUSH2 0x219E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x20F8 SWAP1 PUSH2 0x2C26 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2135 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x213A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2149 DUP3 DUP3 PUSH2 0x218D JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x1A06 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x219A JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A06 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x21B7 SWAP3 SWAP2 SWAP1 PUSH2 0x2DDE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1EDD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x21F9 PUSH2 0x2259 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2206 PUSH2 0x2259 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1340 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2293 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22AA JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x22DC JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22F3 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x231D JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x231D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2346 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1911 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2363 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x236E DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x237E DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x239D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x23A8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x23B8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x23C8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23E5 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x23F0 DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x240F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1911 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x242F JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2447 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2451 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x245F JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2469 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x247B JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x249C JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x247D JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x24AE JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x24B8 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x24CE JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x24F9 JUMPI DUP2 CALLDATALOAD PUSH2 0x24E4 DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x24D0 JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2519 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2523 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2531 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x253B PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x254D JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x256E JUMPI DUP3 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x254F JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x2580 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x258A PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x25A0 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x24F9 JUMPI DUP2 MLOAD PUSH2 0x25B6 DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x25A2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x25E2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x25F9 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2605 DUP10 DUP4 DUP11 ADD PUSH2 0x230B JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x261A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2626 DUP10 DUP4 DUP11 ADD PUSH2 0x2282 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x263E JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x264B DUP9 DUP3 DUP10 ADD PUSH2 0x2282 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2673 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x268A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2696 DUP10 DUP4 DUP11 ADD PUSH2 0x230B JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26AB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x26B7 DUP10 DUP4 DUP11 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26CF JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x264B DUP9 DUP3 DUP10 ADD PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A0 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x26F1 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x26FB DUP6 DUP6 PUSH2 0x2323 JUMP JUMPDEST SWAP3 POP PUSH2 0x180 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2717 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2723 DUP7 DUP3 DUP8 ADD PUSH2 0x2282 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1E0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x274B JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2755 DUP10 DUP10 PUSH2 0x2323 JUMP JUMPDEST SWAP7 POP PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2772 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x277E DUP12 DUP4 DUP13 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x1A0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2797 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x27A3 DUP12 DUP4 DUP13 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1C0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x27BC JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x27C9 DUP11 DUP3 DUP12 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27ED JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x283E JUMPI DUP2 CALLDATALOAD PUSH2 0x2823 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2810 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x283E JUMPI PUSH1 0x40 DUP1 DUP4 DUP10 CALLDATACOPY DUP8 DUP2 ADD DUP6 DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP6 SWAP1 JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x28A4 JUMPI DUP3 CALLDATALOAD PUSH2 0x2887 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP6 ADD PUSH2 0x2873 JUMP JUMPDEST POP POP POP PUSH1 0x80 SWAP7 DUP8 ADD SWAP7 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2858 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x28D2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x20 DUP4 MUL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2930 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x38B9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 PUSH1 0x40 DUP4 DUP2 ADD DUP3 DUP2 MSTORE SWAP1 DUP4 ADD SWAP2 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2989 JUMPI PUSH1 0x20 DUP4 CALLDATALOAD PUSH2 0x296E DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2958 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 PUSH1 0x20 DUP4 ADD PUSH2 0x29DA DUP6 PUSH2 0x29D5 DUP4 DUP8 PUSH2 0x2277 JUMP JUMPDEST PUSH2 0x27F4 JUMP JUMPDEST PUSH2 0x29E4 DUP2 DUP6 PUSH2 0x3810 JUMP JUMPDEST SWAP1 POP PUSH2 0x29F3 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2A01 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2A0E PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2A1C PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP3 PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x2A2F DUP4 DUP8 ADD DUP3 DUP5 PUSH2 0x2801 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2A40 PUSH1 0x80 DUP5 ADD DUP5 PUSH2 0x3865 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x2A53 DUP4 DUP3 DUP5 PUSH2 0x2849 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2A64 PUSH1 0xA0 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x2A77 DUP4 DUP3 DUP5 PUSH2 0x28BA JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2A88 PUSH1 0xC0 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x2A9B DUP4 DUP3 DUP5 PUSH2 0x28BA JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2AAC PUSH1 0xE0 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x2ABF DUP4 DUP3 DUP5 PUSH2 0x28BA JUMP JUMPDEST PUSH2 0x100 DUP7 DUP2 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x120 DUP1 DUP8 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP6 DUP7 ADD CALLDATALOAD SWAP6 SWAP1 SWAP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2AF8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 PUSH2 0x2B1E DUP3 PUSH2 0x38E5 JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2B31 PUSH1 0x60 DUP3 ADD DUP3 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2B3E PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2B4C PUSH1 0x80 DUP3 ADD DUP3 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2B59 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2B67 PUSH1 0xA0 DUP3 ADD DUP3 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2B74 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2B85 PUSH1 0xC0 DUP4 ADD PUSH1 0xC0 DUP4 ADD PUSH2 0x2944 JUMP JUMPDEST PUSH2 0x140 DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2BEB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x38B9 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2C61 SWAP1 DUP4 ADD DUP6 PUSH2 0x29BE JUMP JUMPDEST SWAP1 POP PUSH2 0x1A06 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2C95 DUP4 DUP3 ADD DUP9 PUSH2 0x29BE JUMP JUMPDEST SWAP1 POP PUSH2 0x2CA4 PUSH1 0x40 DUP5 ADD DUP8 PUSH2 0x2990 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x2CB7 DUP2 DUP6 DUP8 PUSH2 0x2801 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH2 0x200 DUP2 ADD PUSH2 0x2CE1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2AED JUMP JUMPDEST PUSH2 0x1A06 PUSH2 0x1A0 DUP4 ADD DUP5 PUSH2 0x2B9C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x0 PUSH2 0x2C0 PUSH1 0x20 PUSH2 0x2D0E DUP2 DUP6 ADD DUP13 PUSH2 0x2AED JUMP JUMPDEST PUSH2 0x2D1C PUSH2 0x1A0 DUP6 ADD DUP12 PUSH2 0x2B9C JUMP JUMPDEST DUP2 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x2D30 DUP3 DUP6 ADD DUP10 DUP12 PUSH2 0x28EE JUMP JUMPDEST SWAP2 POP DUP4 DUP3 SUB PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x2D46 DUP3 DUP8 DUP10 PUSH2 0x28EE JUMP JUMPDEST DUP6 MLOAD SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x0 PUSH2 0x240 DUP6 ADD JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x2D74 JUMPI DUP4 MLOAD DUP2 MSTORE SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP3 ADD PUSH2 0x2D55 JUMP JUMPDEST POP POP DUP1 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x280 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2DA9 JUMPI PUSH2 0x2D97 DUP5 MLOAD PUSH2 0x38AD JUMP JUMPDEST DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D84 JUMP JUMPDEST POP POP POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x2E28 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x2918 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2E3B DUP2 DUP8 DUP10 PUSH2 0x28EE JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x2CB7 DUP2 DUP6 DUP8 PUSH2 0x28EE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x2E5E JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1911 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2918 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C5F PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x9082A69 PUSH1 0xE3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E4445585F4D49534D415443480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5048415345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4E4F4E4345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F424F425F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D111519553911151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204E4F5F4153534554535F474956454E00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204348414E4E454C5F414C52454144595F PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1111519553911151 PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F4E4F545F444953 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1415551151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4D45524B4C455F50 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x2927A7A3 PUSH1 0xE1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D11254D415551151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A2057524F4E475F41525241595F4C454E47 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x544853 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F414C4943455F5349 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x47 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5245534F4C564552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F42414C414E434553 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0xBE9082A69 PUSH1 0xDB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x1340 DUP3 DUP5 PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1911 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x29BE JUMP JUMPDEST PUSH2 0x180 DUP2 ADD PUSH2 0x1340 DUP3 DUP5 PUSH2 0x2AED JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3771 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x378B JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP2 ADD SWAP3 POP DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x37B8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x37D2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3808 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x1911 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3833 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3853 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x387B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x389B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38D4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x38BC JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1AF1 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x38FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 BYTE DUP14 0x2C SHL 0xCB 0x4D SWAP15 0xBA 0xC9 PUSH29 0xF7150053B4210E8074BE283E3142B6AEF9836DC99664736F6C63430007 ADD STOP CALLER ",
              "sourceMap": "864:12790:10:-:0;;;;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;864:12790:10;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 274
                  },
                  {
                    "length": 32,
                    "start": 952
                  },
                  {
                    "length": 32,
                    "start": 1892
                  },
                  {
                    "length": 32,
                    "start": 2015
                  },
                  {
                    "length": 32,
                    "start": 2301
                  },
                  {
                    "length": 32,
                    "start": 2470
                  },
                  {
                    "length": 32,
                    "start": 3759
                  },
                  {
                    "length": 32,
                    "start": 4132
                  },
                  {
                    "length": 32,
                    "start": 4492
                  },
                  {
                    "length": 32,
                    "start": 4823
                  },
                  {
                    "length": 32,
                    "start": 4947
                  },
                  {
                    "length": 32,
                    "start": 5063
                  },
                  {
                    "length": 32,
                    "start": 5579
                  },
                  {
                    "length": 32,
                    "start": 5716
                  },
                  {
                    "length": 32,
                    "start": 5853
                  },
                  {
                    "length": 32,
                    "start": 6006
                  },
                  {
                    "length": 32,
                    "start": 6137
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106101025760003560e01c80636f33389e11610095578063e7283a8d11610064578063e7283a8d14610321578063e985256914610341578063eeb30fea14610361578063f19eb10e14610376578063f83d08ba1461039857610182565b80636f33389e14610294578063b081e9c8146102c1578063c60939be146102e1578063cefa51221461030157610182565b80634d3fcbda116100d15780634d3fcbda146102215780635bc9d96d146102415780635fd334d914610261578063635ae9011461028157610182565b8063072f25fd14610187578063241686a0146101a95780632d34ba79146101d45780633ff0da16146101f457610182565b3661018257306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101595760405162461bcd60e51b815260040161015090613614565b60405180910390fd5b60016000541461017b5760405162461bcd60e51b815260040161015090613407565b6001600055005b600080fd5b34801561019357600080fd5b506101a76101a2366004612730565b6103ad565b005b3480156101b557600080fd5b506101be610757565b6040516101cb9190612c29565b60405180910390f35b3480156101e057600080fd5b506101a76101ef366004612351565b6107d4565b34801561020057600080fd5b5061021461020f36600461241e565b6108ea565b6040516101cb919061372f565b34801561022d57600080fd5b506101a761023c3660046125cb565b61099b565b34801561024d57600080fd5b506101a761025c366004612389565b610ea4565b34801561026d57600080fd5b506101a761027c3660046126dc565b611019565b6101a761028f3660046123d3565b611181565b3480156102a057600080fd5b506102b46102af366004612335565b6112ca565b6040516101cb9190613752565b3480156102cd57600080fd5b506102b46102dc366004612335565b611346565b3480156102ed57600080fd5b506101a76102fc36600461265c565b6113bc565b34801561030d57600080fd5b506102b461031c366004612335565b6115be565b34801561032d57600080fd5b506102b461033c366004612335565b611647565b34801561034d57600080fd5b506102b461035c366004612351565b6116d0565b34801561036d57600080fd5b506101be611769565b34801561038257600080fd5b5061038b6117e6565b6040516101cb91906136d3565b3480156103a457600080fd5b506102b461188e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156103f65760405162461bcd60e51b815260040161015090613614565b6001600054146104185760405162461bcd60e51b815260040161015090613407565b6002600055863061042c6020830183612335565b6001600160a01b0316146104525760405162461bcd60e51b815260040161015090612f9b565b6020808901356000908152600c9091526040902060018101546104875760405162461bcd60e51b815260040161015090613356565b80546104928a611894565b146104af5760405162461bcd60e51b815260040161015090613680565b600281015460ff16156104d45760405162461bcd60e51b8152600401610150906130e3565b60028101805460ff191660011790556104eb6121e6565b81600101544210156106d357896101600135898960405161050d929190612bc9565b6040518091039020146105325760405162461bcd60e51b815260040161015090613680565b61054260a08b0160808c01612335565b6001600160a01b0316336001600160a01b031614806105b357506105b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a69250505060a08d0160808e01612335565b6101608d013591906118c4565b6105cf5760405162461bcd60e51b8152600401610150906135df565b60006105e160608c0160408d01612335565b9050806001600160a01b0316638ef98a7e8c60c00160405160200161060691906136c5565b6040516020818303038152906040528c8c8c8c6040518663ffffffff1660e01b8152600401610639959493929190612e15565b60806040518083038186803b15801561065157600080fd5b505afa158015610665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106899190612508565b915061069d60c08c013560e08d01356118ec565b8251602081015190516106af916118ec565b11156106cd5760405162461bcd60e51b81526004016101509061364b565b506106e8565b6106e5368b90038b0160c08c01612436565b90505b6107016106fb60c08c0160a08d01612335565b82611918565b7f93f6b8187e81bd7d01ce234c043cd6ae4feda2e2ae91daae0962c68a656da8c7338b848c8c8c8c8860405161073e989796959493929190612cef565b60405180910390a1505060016000555050505050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107a25760405162461bcd60e51b815260040161015090613614565b6001600054146107c45760405162461bcd60e51b815260040161015090613407565b506002546001600160a01b031690565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561081d5760405162461bcd60e51b815260040161015090613614565b6001546001600160a01b0316156108465760405162461bcd60e51b81526004016101509061352b565b6001600160a01b0382161580159061086657506001600160a01b03811615155b6108825760405162461bcd60e51b815260040161015090613224565b806001600160a01b0316826001600160a01b031614156108b45760405162461bcd60e51b815260040161015090612fd0565b6108bc61196e565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6108f261220b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561093b5760405162461bcd60e51b815260040161015090613614565b60016000541461095d5760405162461bcd60e51b815260040161015090613407565b506000908152600c60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109e45760405162461bcd60e51b815260040161015090613614565b600160005414610a065760405162461bcd60e51b815260040161015090613407565b60026000558430610a1a6020830183612335565b6001600160a01b0316148015610a5257506001546001600160a01b0316610a476040830160208401612335565b6001600160a01b0316145b8015610a8057506002546001600160a01b0316610a756060830160408401612335565b6001600160a01b0316145b610a9c5760405162461bcd60e51b815260040161015090613163565b83610ab95760405162461bcd60e51b81526004016101509061312c565b83821115610ad95760405162461bcd60e51b81526004016101509061355b565b600654610ae587611975565b14610b025760405162461bcd60e51b815260040161015090612eb2565b610b0a611988565b610b265760405162461bcd60e51b815260040161015090612f64565b60005b84811015610e56576000868683818110610b3f57fe5b9050602002016020810190610b549190612335565b9050600084831015610bd957858584818110610b6c57fe5b905060200201359050888060600190610b85919061375b565b82818110610b8f57fe5b9050602002016020810190610ba49190612335565b6001600160a01b0316826001600160a01b031614610bd45760405162461bcd60e51b815260040161015090612ef6565b610c45565b5060005b610bea60608a018a61375b565b9050811015610c4557610c0060608a018a61375b565b82818110610c0a57fe5b9050602002016020810190610c1f9190612335565b6001600160a01b0316826001600160a01b03161415610c3d57610c45565b600101610bdd565b6000610c5460608b018b61375b565b90508214610c7f57610c6960e08b018b61375b565b83818110610c7357fe5b90506020020135610c82565b60015b6001600160a01b0384166000908152600b60205260409020549091508111610cbc5760405162461bcd60e51b8152600401610150906131dc565b6001600160a01b0383166000908152600b6020526040812091909155610ce1836119a5565b90506000610cee846119c0565b9050610cf86121e6565b610d0560608d018d61375b565b9050841415610d8f576040518060400160405280604051806040016040528086815260200185815250815260200160405180604001604052808f6020016020810190610d519190612335565b6001600160a01b03166001600160a01b031681526020018f6040016020810190610d7b9190612335565b6001600160a01b0316905290529050610e3b565b610d9c60808d018d6137a2565b85818110610da657fe5b905060800201803603810190610dbc9190612436565b9050610dfd610dce60a08e018e61375b565b86818110610dd857fe5b9050602002013584038260000151600060028110610df257fe5b6020020151906119f5565b815152610e34610e1060c08e018e61375b565b86818110610e1a57fe5b9050602002013583038260000151600160028110610df257fe5b8151602001525b610e458582611918565b505060019093019250610b29915050565b507f49cbb28c69ffbdb6b3893f83d64557662a5dd43ffd6045b6a5180ab0a027f224338760068888604051610e8f959493929190612c70565b60405180910390a15050600160005550505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610eed5760405162461bcd60e51b815260040161015090613614565b600160005414610f0f5760405162461bcd60e51b815260040161015090613407565b6002600055336001600160a01b0383161480610f3c5750806001600160a01b0316826001600160a01b0316145b610f585760405162461bcd60e51b8152600401610150906134f4565b6001600160a01b038084166000908152600460209081526040808320938616835292905290812054610f8b908590611a0e565b905060008111610fad5760405162461bcd60e51b815260040161015090613482565b6001600160a01b03808516600090815260046020908152604080832093871683529290522054610fdd9082611a22565b6001600160a01b0380861660009081526004602090815260408083209388168352929052205561100e848383611a64565b505060016000555050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110625760405162461bcd60e51b815260040161015090613614565b6001600054146110845760405162461bcd60e51b815260040161015090613407565b600260005582306110986020830183612335565b6001600160a01b0316146110be5760405162461bcd60e51b815260040161015090612f9b565b60006110c985611894565b90506110dc848460066002015484611a95565b6110e4611988565b6111005760405162461bcd60e51b815260040161015090612f64565b6020808601356000908152600c909152604090206001810154156111365760405162461bcd60e51b8152600401610150906134ab565b818155611148426101408801356118ec565b60018201556040517f87b348a76dd4ef431d45553a1d8c5934db960e64201a5776ab64e3eb397f4cfa90610e8f90339089908590612cc3565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111ca5760405162461bcd60e51b815260040161015090613614565b6001600054146111ec5760405162461bcd60e51b815260040161015090613407565b60026000556111fa82611af7565b156112235780341461121e5760405162461bcd60e51b81526004016101509061329c565b611269565b34156112415760405162461bcd60e51b815260040161015090613315565b61124d82333084611b04565b6112695760405162461bcd60e51b81526004016101509061325b565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906112b99084908490612dde565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156113155760405162461bcd60e51b815260040161015090613614565b6001600054146113375760405162461bcd60e51b815260040161015090613407565b611340826119a5565b92915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156113915760405162461bcd60e51b815260040161015090613614565b6001600054146113b35760405162461bcd60e51b815260040161015090613407565b611340826119c0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114055760405162461bcd60e51b815260040161015090613614565b6001600054146114275760405162461bcd60e51b815260040161015090613407565b6002600055843061143b6020830183612335565b6001600160a01b031614801561147357506001546001600160a01b03166114686040830160208401612335565b6001600160a01b0316145b80156114a157506002546001600160a01b03166114966060830160408401612335565b6001600160a01b0316145b6114bd5760405162461bcd60e51b815260040161015090613163565b60006114c887611975565b90506114d8878288888888611b57565b6114e0611988565b156114fd5760405162461bcd60e51b815260040161015090612f64565b600754610120880135116115235760405162461bcd60e51b815260040161015090613007565b61152b611c61565b61155f5761153e426101008901356118ec565b60095561155b6115546101008901356002611c69565b42906118ec565b600a555b60068181556101208801356007556101408801356008556040517fef03cf86f2e77e1a0ae5cb25b50519e55b94788b920ace71f92341df2dab97ed916115a89133918b91612c3d565b60405180910390a1505060016000555050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116095760405162461bcd60e51b815260040161015090613614565b60016000541461162b5760405162461bcd60e51b815260040161015090613407565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116925760405162461bcd60e51b815260040161015090613614565b6001600054146116b45760405162461bcd60e51b815260040161015090613407565b506001600160a01b03166000908152600b602052604090205490565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561171b5760405162461bcd60e51b815260040161015090613614565b60016000541461173d5760405162461bcd60e51b815260040161015090613407565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117b45760405162461bcd60e51b815260040161015090613614565b6001600054146117d65760405162461bcd60e51b815260040161015090613407565b506001546001600160a01b031690565b6117ee61222b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156118375760405162461bcd60e51b815260040161015090613614565b6001600054146118595760405162461bcd60e51b815260040161015090613407565b506040805160a08101825260065481526007546020820152600854918101919091526009546060820152600a54608082015290565b60005481565b6000816040516020016118a79190613720565b604051602081830303815290604052805190602001209050919050565b6000816001600160a01b03166118da8585611ca3565b6001600160a01b031614949350505050565b6000828201838110156119115760405162461bcd60e51b8152600401610150906130ac565b9392505050565b60005b6002811015611969578151600090826002811061193457fe5b60200201519050801561196057611960848460200151846002811061195557fe5b602002015183611cbb565b5060010161191b565b505050565b6001600055565b6000816040516020016118a7919061370d565b600042600660030154111580156119a05750600a5442105b905090565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b03811660009081526005602090815260408083205460039092528220546119ed84611d1c565b010392915050565b600082820183811015611911576000195b949350505050565b600061191182611a1d85611d1c565b611db3565b600061191183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dc9565b611a6e8382611df5565b611a79838383611e17565b6119695760405162461bcd60e51b81526004016101509061303e565b611ad5848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250859150611e409050565b611af15760405162461bcd60e51b81526004016101509061343e565b50505050565b6001600160a01b03161590565b6000611b4e85858585604051602401611b1f93929190612dba565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052611edd565b95945050505050565b60008086604051602001611b6c929190612e50565b604051602081830303815290604052805190602001209050611bd685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bce9250505060408a0160208b01612335565b8391906118c4565b611bf25760405162461bcd60e51b81526004016101509061359e565b611c3c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bce9250505060608a0160408b01612335565b611c585760405162461bcd60e51b815260040161015090613075565b50505050505050565b600954421090565b600082611c7857506000611340565b82820282848281611c8557fe5b04146119115760405162461bcd60e51b81526004016101509061339b565b600080611caf84611f8e565b9050611a068184611fa1565b6001600160a01b03808416600090815260046020908152604080832093861683529290522054611ceb90826119f5565b6001600160a01b03938416600090815260046020908152604080832095909616825293909352929091209190915550565b6000611d2782611af7565b611dac576040516370a0823160e01b81526001600160a01b038316906370a0823190611d57903090600401612c29565b60206040518083038186803b158015611d6f57600080fd5b505afa158015611d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da791906127dc565b611340565b5047919050565b6000818310611dc25781611911565b5090919050565b60008184841115611ded5760405162461bcd60e51b81526004016101509190612e68565b505050900390565b6001600160a01b03909116600090815260036020526040902080549091019055565b6000611e2284611af7565b611e3657611e318484846120cf565b611a06565b611a0683836120dc565b600081815b8551811015611ed2576000868281518110611e5c57fe5b60200260200101519050808311611e9d578281604051602001611e80929190612bbb565b604051602081830303815290604052805190602001209250611ec9565b8083604051602001611eb0929190612bbb565b6040516020818303038152906040528051906020012092505b50600101611e45565b509092149392505050565b6000611ee883612154565b611f045760405162461bcd60e51b8152600401610150906133dc565b60006060846001600160a01b031684604051611f209190612bd9565b6000604051808303816000865af19150503d8060008114611f5d576040519150601f19603f3d011682016040523d82523d6000602084013e611f62565b606091505b5091509150611f71828261218d565b80511580611b4e575080806020019051810190611b4e91906123fe565b6000816040516020016118a79190612bf5565b60008151604114611fc45760405162461bcd60e51b815260040161015090612f2d565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156120165760405162461bcd60e51b81526004016101509061319a565b8060ff16601b1415801561202e57508060ff16601c14155b1561204b5760405162461bcd60e51b8152600401610150906132d3565b6000600187838686604051600081526020016040526040516120709493929190612df7565b6020604051602081039080840390855afa158015612092573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120c55760405162461bcd60e51b815260040161015090612e7b565b9695505050505050565b6000611a0684848461219e565b6000806060846001600160a01b0316846040516120f890612c26565b60006040518083038185875af1925050503d8060008114612135576040519150601f19603f3d011682016040523d82523d6000602084013e61213a565b606091505b5091509150612149828261218d565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611a06575050151592915050565b8161219a57805160208201fd5b5050565b6000611a068484846040516024016121b7929190612dde565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052611edd565b60405180604001604052806121f9612259565b8152602001612206612259565b905290565b604080516060810182526000808252602082018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806002906020820280368337509192915050565b8035611340816138e5565b60008083601f840112612293578182fd5b50813567ffffffffffffffff8111156122aa578182fd5b60208301915083602080830285010111156122c457600080fd5b9250929050565b60008083601f8401126122dc578182fd5b50813567ffffffffffffffff8111156122f3578182fd5b6020830191508360208285010111156122c457600080fd5b6000610160828403121561231d578081fd5b50919050565b6000610180828403121561231d578081fd5b600060208284031215612346578081fd5b8135611911816138e5565b60008060408385031215612363578081fd5b823561236e816138e5565b9150602083013561237e816138e5565b809150509250929050565b60008060006060848603121561239d578081fd5b83356123a8816138e5565b925060208401356123b8816138e5565b915060408401356123c8816138e5565b809150509250925092565b600080604083850312156123e5578182fd5b82356123f0816138e5565b946020939093013593505050565b60006020828403121561240f578081fd5b81518015158114611911578182fd5b60006020828403121561242f578081fd5b5035919050565b600060808284031215612447578081fd5b61245160406137e9565b83601f84011261245f578182fd5b61246960406137e9565b8084604086018781111561247b578586fd5b855b600281101561249c57823585526020948501949092019160010161247d565b5082855287605f8801126124ae578586fd5b6124b860406137e9565b93508392509050608086018710156124ce578485fd5b845b60028110156124f95781356124e4816138e5565b845260209384019391909101906001016124d0565b50506020830152509392505050565b600060808284031215612519578081fd5b61252360406137e9565b83601f840112612531578182fd5b61253b60406137e9565b8084604086018781111561254d578586fd5b855b600281101561256e57825185526020948501949092019160010161254f565b5082855287605f880112612580578586fd5b61258a60406137e9565b93508392509050608086018710156125a0578485fd5b845b60028110156124f95781516125b6816138e5565b845260209384019391909101906001016125a2565b6000806000806000606086880312156125e2578283fd5b853567ffffffffffffffff808211156125f9578485fd5b61260589838a0161230b565b9650602088013591508082111561261a578485fd5b61262689838a01612282565b9096509450604088013591508082111561263e578283fd5b5061264b88828901612282565b969995985093965092949392505050565b600080600080600060608688031215612673578283fd5b853567ffffffffffffffff8082111561268a578485fd5b61269689838a0161230b565b965060208801359150808211156126ab578485fd5b6126b789838a016122cb565b909650945060408801359150808211156126cf578283fd5b5061264b888289016122cb565b60008060006101a084860312156126f1578081fd5b6126fb8585612323565b925061018084013567ffffffffffffffff811115612717578182fd5b61272386828701612282565b9497909650939450505050565b60008060008060008060006101e0888a03121561274b578485fd5b6127558989612323565b965061018088013567ffffffffffffffff80821115612772578687fd5b61277e8b838c016122cb565b90985096506101a08a0135915080821115612797578384fd5b6127a38b838c016122cb565b90965094506101c08a01359150808211156127bc578384fd5b506127c98a828b016122cb565b989b979a50959850939692959293505050565b6000602082840312156127ed578081fd5b5051919050565b6001600160a01b03169052565b60008284526020808501945082825b8581101561283e578135612823816138e5565b6001600160a01b031687529582019590820190600101612810565b509495945050505050565b60008284526020808501945082825b8581101561283e576040808389378781018581529083019085905b60028210156128a4578235612887816138e5565b6001600160a01b0316815291850191600191909101908501612873565b5050506080968701969190910190600101612858565b81835260006001600160fb1b038311156128d2578081fd5b6020830280836020870137939093016020019283525090919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526129308160208601602086016138b9565b601f01601f19169290920160200192915050565b604081833760006040838101828152908301915b6002811015612989576020833561296e816138e5565b6001600160a01b031683529283019290910190600101612958565b5050505050565b8054825260018101546020830152600281015460408301526003810154606083015260040154608090910152565b6000610160602083016129da856129d58387612277565b6127f4565b6129e48185613810565b90506129f360208601826127f4565b50612a016040840184613810565b612a0e60408601826127f4565b50612a1c606084018461381d565b826060870152612a2f8387018284612801565b92505050612a406080840184613865565b8583036080870152612a53838284612849565b92505050612a6460a084018461381d565b85830360a0870152612a778382846128ba565b92505050612a8860c084018461381d565b85830360c0870152612a9b8382846128ba565b92505050612aac60e084018461381d565b85830360e0870152612abf8382846128ba565b6101008681013590880152610120808701359088015261014095860135959096019490945250929392505050565b8035612af8816138e5565b6001600160a01b03908116835260208281013590840152604082013590612b1e826138e5565b166040830152612b316060820182613810565b612b3e60608401826127f4565b50612b4c6080820182613810565b612b5960808401826127f4565b50612b6760a0820182613810565b612b7460a08401826127f4565b50612b8560c0830160c08301612944565b610140818101359083015261016090810135910152565b80548252600181015460208301526002015460ff161515604090910152565b918252602082015260400190565b6000828483379101908152919050565b60008251612beb8184602087016138b9565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260e060208201819052600090612c61908301856129be565b9050611a066040830184612990565b6001600160a01b038616815261010060208201819052600090612c95838201886129be565b9050612ca46040840187612990565b82810360e0840152612cb7818587612801565b98975050505050505050565b6001600160a01b03841681526102008101612ce16020830185612aed565b611a066101a0830184612b9c565b6001600160a01b038916815260006102c06020612d0e8185018c612aed565b612d1c6101a085018b612b9c565b81610200850152612d30828501898b6128ee565b9150838203610220850152612d468287896128ee565b85519093509150600061024085015b6002821015612d74578351815292820192600191909101908201612d55565b5050808501519150610280840160005b6002811015612da957612d9784516138ad565b82529282019290820190600101612d84565b505050509998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b600060608252612e286060830188612918565b8281036020840152612e3b8187896128ee565b90508281036040840152612cb78185876128ee565b6040810160028410612e5e57fe5b9281526020015290565b6000602082526119116020830184612918565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f60408201526309082a6960e31b606082015260800190565b6020808252601e908201527f434d4341646a7564696361746f723a20494e4445585f4d49534d415443480000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f5048415345000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345000000604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f424f425f53494700604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11151955391115160ba1b606082015260800190565b6020808252601f908201527f434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e00604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c00604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526028908201527f434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f604082015267111151955391115160c21b606082015260800190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b60208082526025908201527f434d4341646a7564696361746f723a205452414e534645525f4e4f545f444953604082015264141555115160da1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f506040820152632927a7a360e11b606082015260800190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11254d41555115160ba1b606082015260800190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b60208082526023908201527f434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e4760408201526254485360e81b606082015260800190565b60208082526021908201527f434d4341646a7564696361746f723a20494e56414c49445f414c4943455f53496040820152604760f81b606082015260800190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553604082015260600190565b60208082526025908201527f434d4341646a7564696361746f723a20494e56414c49445f5452414e534645526040820152640be9082a6960db1b606082015260800190565b608081016113408284612944565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60006020825261191160208301846129be565b61018081016113408284612aed565b815181526020808301519082015260409182015115159181019190915260600190565b90815260200190565b6000808335601e19843603018112613771578283fd5b83018035915067ffffffffffffffff82111561378b578283fd5b60209081019250810236038213156122c457600080fd5b6000808335601e198436030181126137b8578283fd5b83018035915067ffffffffffffffff8211156137d2578283fd5b60200191506080810236038213156122c457600080fd5b60405181810167ffffffffffffffff8111828210171561380857600080fd5b604052919050565b60008235611911816138e5565b6000808335601e19843603018112613833578283fd5b830160208101925035905067ffffffffffffffff81111561385357600080fd5b6020810236038313156122c457600080fd5b6000808335601e1984360301811261387b578283fd5b830160208101925035905067ffffffffffffffff81111561389b57600080fd5b6080810236038313156122c457600080fd5b6001600160a01b031690565b60005b838110156138d45781810151838201526020016138bc565b83811115611af15750506000910152565b6001600160a01b03811681146138fa57600080fd5b5056fea2646970667358221220b11a8d2c1bcb4d9ebac97cf7150053b4210e8074be283e3142b6aef9836dc99664736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x102 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F33389E GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xE7283A8D GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE7283A8D EQ PUSH2 0x321 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0xF19EB10E EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x398 JUMPI PUSH2 0x182 JUMP JUMPDEST DUP1 PUSH4 0x6F33389E EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0xC60939BE EQ PUSH2 0x2E1 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x301 JUMPI PUSH2 0x182 JUMP JUMPDEST DUP1 PUSH4 0x4D3FCBDA GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x4D3FCBDA EQ PUSH2 0x221 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0x5FD334D9 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x281 JUMPI PUSH2 0x182 JUMP JUMPDEST DUP1 PUSH4 0x72F25FD EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x241686A0 EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x3FF0DA16 EQ PUSH2 0x1F4 JUMPI PUSH2 0x182 JUMP JUMPDEST CALLDATASIZE PUSH2 0x182 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x159 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x17B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2730 JUMP JUMPDEST PUSH2 0x3AD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0x757 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x2C29 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x1EF CALLDATASIZE PUSH1 0x4 PUSH2 0x2351 JUMP JUMPDEST PUSH2 0x7D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x20F CALLDATASIZE PUSH1 0x4 PUSH2 0x241E JUMP JUMPDEST PUSH2 0x8EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x372F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x25CB JUMP JUMPDEST PUSH2 0x99B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x2389 JUMP JUMPDEST PUSH2 0xEA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x26DC JUMP JUMPDEST PUSH2 0x1019 JUMP JUMPDEST PUSH2 0x1A7 PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x23D3 JUMP JUMPDEST PUSH2 0x1181 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x2AF CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x12CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x3752 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x2DC CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x1346 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A7 PUSH2 0x2FC CALLDATASIZE PUSH1 0x4 PUSH2 0x265C JUMP JUMPDEST PUSH2 0x13BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x15BE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x33C CALLDATASIZE PUSH1 0x4 PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x1647 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0x2351 JUMP JUMPDEST PUSH2 0x16D0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0x1769 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x38B PUSH2 0x17E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x36D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B4 PUSH2 0x188E JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x418 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP7 ADDRESS PUSH2 0x42C PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x452 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3356 JUMP JUMPDEST DUP1 SLOAD PUSH2 0x492 DUP11 PUSH2 0x1894 JUMP JUMPDEST EQ PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3680 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x4D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x30E3 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x4EB PUSH2 0x21E6 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x6D3 JUMPI DUP10 PUSH2 0x160 ADD CALLDATALOAD DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0x50D SWAP3 SWAP2 SWAP1 PUSH2 0x2BC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 EQ PUSH2 0x532 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3680 JUMP JUMPDEST PUSH2 0x542 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x5B3 JUMPI POP PUSH2 0x5B3 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x5A6 SWAP3 POP POP POP PUSH1 0xA0 DUP14 ADD PUSH1 0x80 DUP15 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x160 DUP14 ADD CALLDATALOAD SWAP2 SWAP1 PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5E1 PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x2335 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8EF98A7E DUP13 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x606 SWAP2 SWAP1 PUSH2 0x36C5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x639 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E15 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x651 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x665 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x689 SWAP2 SWAP1 PUSH2 0x2508 JUMP JUMPDEST SWAP2 POP PUSH2 0x69D PUSH1 0xC0 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP14 ADD CALLDATALOAD PUSH2 0x18EC JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x6AF SWAP2 PUSH2 0x18EC JUMP JUMPDEST GT ISZERO PUSH2 0x6CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x364B JUMP JUMPDEST POP PUSH2 0x6E8 JUMP JUMPDEST PUSH2 0x6E5 CALLDATASIZE DUP12 SWAP1 SUB DUP12 ADD PUSH1 0xC0 DUP13 ADD PUSH2 0x2436 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x701 PUSH2 0x6FB PUSH1 0xC0 DUP13 ADD PUSH1 0xA0 DUP14 ADD PUSH2 0x2335 JUMP JUMPDEST DUP3 PUSH2 0x1918 JUMP JUMPDEST PUSH32 0x93F6B8187E81BD7D01CE234C043CD6AE4FEDA2E2AE91DAAE0962C68A656DA8C7 CALLER DUP12 DUP5 DUP13 DUP13 DUP13 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x73E SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2CEF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x81D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x846 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x352B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x866 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x882 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3224 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2FD0 JUMP JUMPDEST PUSH2 0x8BC PUSH2 0x196E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x8F2 PUSH2 0x220B JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x93B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xA06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0xA1A PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xA52 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA47 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0xA80 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA75 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xA9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3163 JUMP JUMPDEST DUP4 PUSH2 0xAB9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x312C JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x355B JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0xAE5 DUP8 PUSH2 0x1975 JUMP JUMPDEST EQ PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2EB2 JUMP JUMPDEST PUSH2 0xB0A PUSH2 0x1988 JUMP JUMPDEST PUSH2 0xB26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xE56 JUMPI PUSH1 0x0 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0xB3F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB54 SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP4 LT ISZERO PUSH2 0xBD9 JUMPI DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xB6C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 POP DUP9 DUP1 PUSH1 0x60 ADD SWAP1 PUSH2 0xB85 SWAP2 SWAP1 PUSH2 0x375B JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xB8F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xBA4 SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xBD4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2EF6 JUMP JUMPDEST PUSH2 0xC45 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH2 0xBEA PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x375B JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0xC45 JUMPI PUSH2 0xC00 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x375B JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xC0A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xC1F SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xC3D JUMPI PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xBDD JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC54 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x375B JUMP JUMPDEST SWAP1 POP DUP3 EQ PUSH2 0xC7F JUMPI PUSH2 0xC69 PUSH1 0xE0 DUP12 ADD DUP12 PUSH2 0x375B JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0xC73 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT PUSH2 0xCBC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x31DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xCE1 DUP4 PUSH2 0x19A5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xCEE DUP5 PUSH2 0x19C0 JUMP JUMPDEST SWAP1 POP PUSH2 0xCF8 PUSH2 0x21E6 JUMP JUMPDEST PUSH2 0xD05 PUSH1 0x60 DUP14 ADD DUP14 PUSH2 0x375B JUMP JUMPDEST SWAP1 POP DUP5 EQ ISZERO PUSH2 0xD8F JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP16 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xD51 SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 PUSH1 0x40 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xD7B SWAP2 SWAP1 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE SWAP1 MSTORE SWAP1 POP PUSH2 0xE3B JUMP JUMPDEST PUSH2 0xD9C PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x37A2 JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0xDA6 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x80 MUL ADD DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xDBC SWAP2 SWAP1 PUSH2 0x2436 JUMP JUMPDEST SWAP1 POP PUSH2 0xDFD PUSH2 0xDCE PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x375B JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0xDD8 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP5 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xDF2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x19F5 JUMP JUMPDEST DUP2 MLOAD MSTORE PUSH2 0xE34 PUSH2 0xE10 PUSH1 0xC0 DUP15 ADD DUP15 PUSH2 0x375B JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0xE1A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xDF2 JUMPI INVALID JUMPDEST DUP2 MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST PUSH2 0xE45 DUP6 DUP3 PUSH2 0x1918 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0xB29 SWAP2 POP POP JUMP JUMPDEST POP PUSH32 0x49CBB28C69FFBDB6B3893F83D64557662A5DD43FFD6045B6A5180AB0A027F224 CALLER DUP8 PUSH1 0x6 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0xE8F SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xEED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xF0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0xF3C JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xF58 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x34F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0xF8B SWAP1 DUP6 SWAP1 PUSH2 0x1A0E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xFAD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3482 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0xFDD SWAP1 DUP3 PUSH2 0x1A22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x100E DUP5 DUP4 DUP4 PUSH2 0x1A64 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1062 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1084 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP3 ADDRESS PUSH2 0x1098 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x10BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F9B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10C9 DUP6 PUSH2 0x1894 JUMP JUMPDEST SWAP1 POP PUSH2 0x10DC DUP5 DUP5 PUSH1 0x6 PUSH1 0x2 ADD SLOAD DUP5 PUSH2 0x1A95 JUMP JUMPDEST PUSH2 0x10E4 PUSH2 0x1988 JUMP JUMPDEST PUSH2 0x1100 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0x1136 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x34AB JUMP JUMPDEST DUP2 DUP2 SSTORE PUSH2 0x1148 TIMESTAMP PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH2 0x18EC JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0x87B348A76DD4EF431D45553A1D8C5934DB960E64201A5776AB64E3EB397F4CFA SWAP1 PUSH2 0xE8F SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP6 SWAP1 PUSH2 0x2CC3 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x11CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x11EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x11FA DUP3 PUSH2 0x1AF7 JUMP JUMPDEST ISZERO PUSH2 0x1223 JUMPI DUP1 CALLVALUE EQ PUSH2 0x121E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x329C JUMP JUMPDEST PUSH2 0x1269 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x1241 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3315 JUMP JUMPDEST PUSH2 0x124D DUP3 CALLER ADDRESS DUP5 PUSH2 0x1B04 JUMP JUMPDEST PUSH2 0x1269 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x325B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x12B9 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x2DDE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1315 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1337 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH2 0x1340 DUP3 PUSH2 0x19A5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1391 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x13B3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH2 0x1340 DUP3 PUSH2 0x19C0 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1405 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1427 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x143B PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x1473 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1468 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x14A1 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1496 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x14BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3163 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C8 DUP8 PUSH2 0x1975 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D8 DUP8 DUP3 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1B57 JUMP JUMPDEST PUSH2 0x14E0 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0x14FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x120 DUP9 ADD CALLDATALOAD GT PUSH2 0x1523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3007 JUMP JUMPDEST PUSH2 0x152B PUSH2 0x1C61 JUMP JUMPDEST PUSH2 0x155F JUMPI PUSH2 0x153E TIMESTAMP PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH2 0x18EC JUMP JUMPDEST PUSH1 0x9 SSTORE PUSH2 0x155B PUSH2 0x1554 PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH1 0x2 PUSH2 0x1C69 JUMP JUMPDEST TIMESTAMP SWAP1 PUSH2 0x18EC JUMP JUMPDEST PUSH1 0xA SSTORE JUMPDEST PUSH1 0x6 DUP2 DUP2 SSTORE PUSH2 0x120 DUP9 ADD CALLDATALOAD PUSH1 0x7 SSTORE PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEF03CF86F2E77E1A0AE5CB25B50519E55B94788B920ACE71F92341DF2DAB97ED SWAP2 PUSH2 0x15A8 SWAP2 CALLER SWAP2 DUP12 SWAP2 PUSH2 0x2C3D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1609 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x162B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1692 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x16B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x171B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x173D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x17B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x17D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x17EE PUSH2 0x222B JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3614 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1859 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3407 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x6 SLOAD DUP2 MSTORE PUSH1 0x7 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x8 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x9 SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x18DA DUP6 DUP6 PUSH2 0x1CA3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x30AC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1969 JUMPI DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 PUSH1 0x2 DUP2 LT PUSH2 0x1934 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 POP DUP1 ISZERO PUSH2 0x1960 JUMPI PUSH2 0x1960 DUP5 DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x2 DUP2 LT PUSH2 0x1955 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x1CBB JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x191B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x370D JUMP JUMPDEST PUSH1 0x0 TIMESTAMP PUSH1 0x6 PUSH1 0x3 ADD SLOAD GT ISZERO DUP1 ISZERO PUSH2 0x19A0 JUMPI POP PUSH1 0xA SLOAD TIMESTAMP LT JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0x19ED DUP5 PUSH2 0x1D1C JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1911 JUMPI PUSH1 0x0 NOT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1911 DUP3 PUSH2 0x1A1D DUP6 PUSH2 0x1D1C JUMP JUMPDEST PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1911 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x1DC9 JUMP JUMPDEST PUSH2 0x1A6E DUP4 DUP3 PUSH2 0x1DF5 JUMP JUMPDEST PUSH2 0x1A79 DUP4 DUP4 DUP4 PUSH2 0x1E17 JUMP JUMPDEST PUSH2 0x1969 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x303E JUMP JUMPDEST PUSH2 0x1AD5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x1E40 SWAP1 POP JUMP JUMPDEST PUSH2 0x1AF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x343E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B4E DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1B1F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2DBA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1EDD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B6C SWAP3 SWAP2 SWAP1 PUSH2 0x2E50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1BD6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1BCE SWAP3 POP POP POP PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x2335 JUMP JUMPDEST DUP4 SWAP2 SWAP1 PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x1BF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x359E JUMP JUMPDEST PUSH2 0x1C3C DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1BCE SWAP3 POP POP POP PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x2335 JUMP JUMPDEST PUSH2 0x1C58 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x3075 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD TIMESTAMP LT SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1C78 JUMPI POP PUSH1 0x0 PUSH2 0x1340 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1C85 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x339B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CAF DUP5 PUSH2 0x1F8E JUMP JUMPDEST SWAP1 POP PUSH2 0x1A06 DUP2 DUP5 PUSH2 0x1FA1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1CEB SWAP1 DUP3 PUSH2 0x19F5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP7 AND DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D27 DUP3 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x1DAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D57 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x2C29 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DA7 SWAP2 SWAP1 PUSH2 0x27DC JUMP JUMPDEST PUSH2 0x1340 JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1DC2 JUMPI DUP2 PUSH2 0x1911 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x1DED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0x2E68 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E22 DUP5 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x1E36 JUMPI PUSH2 0x1E31 DUP5 DUP5 DUP5 PUSH2 0x20CF JUMP JUMPDEST PUSH2 0x1A06 JUMP JUMPDEST PUSH2 0x1A06 DUP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x1ED2 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E5C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E9D JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1E80 SWAP3 SWAP2 SWAP1 PUSH2 0x2BBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x1EC9 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1EB0 SWAP3 SWAP2 SWAP1 PUSH2 0x2BBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1E45 JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EE8 DUP4 PUSH2 0x2154 JUMP JUMPDEST PUSH2 0x1F04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x33DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x1F20 SWAP2 SWAP1 PUSH2 0x2BD9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1F5D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F62 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1F71 DUP3 DUP3 PUSH2 0x218D JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B4E JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B4E SWAP2 SWAP1 PUSH2 0x23FE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x2BF5 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x1FC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2F2D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x2016 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x319A JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x202E JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x204B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2070 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2DF7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2092 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x150 SWAP1 PUSH2 0x2E7B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A06 DUP5 DUP5 DUP5 PUSH2 0x219E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x20F8 SWAP1 PUSH2 0x2C26 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2135 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x213A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2149 DUP3 DUP3 PUSH2 0x218D JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x1A06 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x219A JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A06 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x21B7 SWAP3 SWAP2 SWAP1 PUSH2 0x2DDE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1EDD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x21F9 PUSH2 0x2259 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2206 PUSH2 0x2259 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1340 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2293 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22AA JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x22DC JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22F3 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x231D JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x231D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2346 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1911 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2363 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x236E DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x237E DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x239D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x23A8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x23B8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x23C8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23E5 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x23F0 DUP2 PUSH2 0x38E5 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x240F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1911 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x242F JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2447 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2451 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x245F JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2469 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x247B JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x249C JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x247D JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x24AE JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x24B8 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x24CE JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x24F9 JUMPI DUP2 CALLDATALOAD PUSH2 0x24E4 DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x24D0 JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2519 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2523 PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2531 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x253B PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x254D JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x256E JUMPI DUP3 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x254F JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x2580 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x258A PUSH1 0x40 PUSH2 0x37E9 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x25A0 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x24F9 JUMPI DUP2 MLOAD PUSH2 0x25B6 DUP2 PUSH2 0x38E5 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x25A2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x25E2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x25F9 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2605 DUP10 DUP4 DUP11 ADD PUSH2 0x230B JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x261A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2626 DUP10 DUP4 DUP11 ADD PUSH2 0x2282 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x263E JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x264B DUP9 DUP3 DUP10 ADD PUSH2 0x2282 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2673 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x268A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2696 DUP10 DUP4 DUP11 ADD PUSH2 0x230B JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26AB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x26B7 DUP10 DUP4 DUP11 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26CF JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x264B DUP9 DUP3 DUP10 ADD PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A0 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x26F1 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x26FB DUP6 DUP6 PUSH2 0x2323 JUMP JUMPDEST SWAP3 POP PUSH2 0x180 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2717 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2723 DUP7 DUP3 DUP8 ADD PUSH2 0x2282 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1E0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x274B JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2755 DUP10 DUP10 PUSH2 0x2323 JUMP JUMPDEST SWAP7 POP PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2772 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x277E DUP12 DUP4 DUP13 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x1A0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2797 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x27A3 DUP12 DUP4 DUP13 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1C0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x27BC JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x27C9 DUP11 DUP3 DUP12 ADD PUSH2 0x22CB JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27ED JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x283E JUMPI DUP2 CALLDATALOAD PUSH2 0x2823 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2810 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x283E JUMPI PUSH1 0x40 DUP1 DUP4 DUP10 CALLDATACOPY DUP8 DUP2 ADD DUP6 DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP6 SWAP1 JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x28A4 JUMPI DUP3 CALLDATALOAD PUSH2 0x2887 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP6 ADD PUSH2 0x2873 JUMP JUMPDEST POP POP POP PUSH1 0x80 SWAP7 DUP8 ADD SWAP7 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2858 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x28D2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x20 DUP4 MUL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2930 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x38B9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 PUSH1 0x40 DUP4 DUP2 ADD DUP3 DUP2 MSTORE SWAP1 DUP4 ADD SWAP2 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2989 JUMPI PUSH1 0x20 DUP4 CALLDATALOAD PUSH2 0x296E DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2958 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 PUSH1 0x20 DUP4 ADD PUSH2 0x29DA DUP6 PUSH2 0x29D5 DUP4 DUP8 PUSH2 0x2277 JUMP JUMPDEST PUSH2 0x27F4 JUMP JUMPDEST PUSH2 0x29E4 DUP2 DUP6 PUSH2 0x3810 JUMP JUMPDEST SWAP1 POP PUSH2 0x29F3 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2A01 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2A0E PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2A1C PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP3 PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x2A2F DUP4 DUP8 ADD DUP3 DUP5 PUSH2 0x2801 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2A40 PUSH1 0x80 DUP5 ADD DUP5 PUSH2 0x3865 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x2A53 DUP4 DUP3 DUP5 PUSH2 0x2849 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2A64 PUSH1 0xA0 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x2A77 DUP4 DUP3 DUP5 PUSH2 0x28BA JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2A88 PUSH1 0xC0 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x2A9B DUP4 DUP3 DUP5 PUSH2 0x28BA JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2AAC PUSH1 0xE0 DUP5 ADD DUP5 PUSH2 0x381D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x2ABF DUP4 DUP3 DUP5 PUSH2 0x28BA JUMP JUMPDEST PUSH2 0x100 DUP7 DUP2 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x120 DUP1 DUP8 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP6 DUP7 ADD CALLDATALOAD SWAP6 SWAP1 SWAP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2AF8 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 PUSH2 0x2B1E DUP3 PUSH2 0x38E5 JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2B31 PUSH1 0x60 DUP3 ADD DUP3 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2B3E PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2B4C PUSH1 0x80 DUP3 ADD DUP3 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2B59 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2B67 PUSH1 0xA0 DUP3 ADD DUP3 PUSH2 0x3810 JUMP JUMPDEST PUSH2 0x2B74 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x27F4 JUMP JUMPDEST POP PUSH2 0x2B85 PUSH1 0xC0 DUP4 ADD PUSH1 0xC0 DUP4 ADD PUSH2 0x2944 JUMP JUMPDEST PUSH2 0x140 DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2BEB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x38B9 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2C61 SWAP1 DUP4 ADD DUP6 PUSH2 0x29BE JUMP JUMPDEST SWAP1 POP PUSH2 0x1A06 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2C95 DUP4 DUP3 ADD DUP9 PUSH2 0x29BE JUMP JUMPDEST SWAP1 POP PUSH2 0x2CA4 PUSH1 0x40 DUP5 ADD DUP8 PUSH2 0x2990 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x2CB7 DUP2 DUP6 DUP8 PUSH2 0x2801 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH2 0x200 DUP2 ADD PUSH2 0x2CE1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2AED JUMP JUMPDEST PUSH2 0x1A06 PUSH2 0x1A0 DUP4 ADD DUP5 PUSH2 0x2B9C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x0 PUSH2 0x2C0 PUSH1 0x20 PUSH2 0x2D0E DUP2 DUP6 ADD DUP13 PUSH2 0x2AED JUMP JUMPDEST PUSH2 0x2D1C PUSH2 0x1A0 DUP6 ADD DUP12 PUSH2 0x2B9C JUMP JUMPDEST DUP2 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x2D30 DUP3 DUP6 ADD DUP10 DUP12 PUSH2 0x28EE JUMP JUMPDEST SWAP2 POP DUP4 DUP3 SUB PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x2D46 DUP3 DUP8 DUP10 PUSH2 0x28EE JUMP JUMPDEST DUP6 MLOAD SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x0 PUSH2 0x240 DUP6 ADD JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x2D74 JUMPI DUP4 MLOAD DUP2 MSTORE SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP3 ADD PUSH2 0x2D55 JUMP JUMPDEST POP POP DUP1 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x280 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2DA9 JUMPI PUSH2 0x2D97 DUP5 MLOAD PUSH2 0x38AD JUMP JUMPDEST DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D84 JUMP JUMPDEST POP POP POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x2E28 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x2918 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2E3B DUP2 DUP8 DUP10 PUSH2 0x28EE JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x2CB7 DUP2 DUP6 DUP8 PUSH2 0x28EE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x2E5E JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1911 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2918 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C5F PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x9082A69 PUSH1 0xE3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E4445585F4D49534D415443480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5048415345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4E4F4E4345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F424F425F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D111519553911151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204E4F5F4153534554535F474956454E00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204348414E4E454C5F414C52454144595F PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1111519553911151 PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F4E4F545F444953 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1415551151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4D45524B4C455F50 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x2927A7A3 PUSH1 0xE1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D11254D415551151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A2057524F4E475F41525241595F4C454E47 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x544853 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F414C4943455F5349 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x47 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5245534F4C564552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F42414C414E434553 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0xBE9082A69 PUSH1 0xDB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x1340 DUP3 DUP5 PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1911 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x29BE JUMP JUMPDEST PUSH2 0x180 DUP2 ADD PUSH2 0x1340 DUP3 DUP5 PUSH2 0x2AED JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3771 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x378B JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP2 ADD SWAP3 POP DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x37B8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x37D2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3808 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x1911 DUP2 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3833 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3853 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x387B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x389B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38D4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x38BC JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1AF1 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x38FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 BYTE DUP14 0x2C SHL 0xCB 0x4D SWAP15 0xBA 0xC9 PUSH29 0xF7150053B4210E8074BE283E3142B6AEF9836DC99664736F6C63430007 ADD STOP CALLER ",
              "sourceMap": "864:12790:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;307:1;542:4;576:11:::0;864:12790:10;;;;;9214:2884;;;;;;;;;;-1:-1:-1;9214:2884:10;;;;;:::i;:::-;;:::i;:::-;;2153:168:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:447;;;;;;;;;;-1:-1:-1;1322:447:12;;;;;:::i;:::-;;:::i;2174:238:10:-;;;;;;;;;;-1:-1:-1;2174:238:10;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3827:3983::-;;;;;;;;;;-1:-1:-1;3827:3983:10;;;;;:::i;:::-;;:::i;3046:910:11:-;;;;;;;;;;-1:-1:-1;3046:910:11;;;;;:::i;:::-;;:::i;7816:1392:10:-;;;;;;;;;;-1:-1:-1;7816:1392:10;;;;;:::i;:::-;;:::i;1752:848:13:-;;;;;;:::i;:::-;;:::i;789:226::-;;;;;;;;;;-1:-1:-1;789:226:13;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1182:222::-;;;;;;;;;;-1:-1:-1;1182:222:13;;;;;:::i;:::-;;:::i;2418:1403:10:-;;;;;;;;;;-1:-1:-1;2418:1403:10;;;;;:::i;:::-;;:::i;1238:218:11:-;;;;;;;;;;-1:-1:-1;1238:218:11;;;;;:::i;:::-;;:::i;1959:209:10:-;;;;;;;;;;-1:-1:-1;1959:209:10;;;;;:::i;:::-;;:::i;2026:236:11:-;;;;;;;;;;-1:-1:-1;2026:236:11;;;;;:::i;:::-;;:::i;1874:172:12:-;;;;;;;;;;;;;:::i;1749:204:10:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;356:19:17:-;;;;;;;;;;;;;:::i;9214:2884:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;9488:3:10;1662:4:::2;1632:18;;::::0;::::2;9488:3:::0;1632:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1632:35:10::2;;1611:114;;;;-1:-1:-1::0;;;1611:114:10::2;;;;;;;:::i;:::-;9622:14:::3;::::0;;::::3;;9551:39;9605:32:::0;;;:16:::3;:32:::0;;;;;;9745:37:::3;::::0;::::3;::::0;9724:126:::3;;;;-1:-1:-1::0;;;9724:126:10::3;;;;;;;:::i;:::-;9979:33:::0;;9953:22:::3;9971:3:::0;9953:17:::3;:22::i;:::-;:59;9932:143;;;;-1:-1:-1::0;;;9932:143:10::3;;;;;;;:::i;:::-;10141:26;::::0;::::3;::::0;::::3;;10140:27;10119:115;;;;-1:-1:-1::0;;;10119:115:10::3;;;;;;;:::i;:::-;10244:26;::::0;::::3;:33:::0;;-1:-1:-1;;10244:33:10::3;10273:4;10244:33;::::0;;10288:22:::3;;:::i;:::-;10343:15;:37;;;10325:15;:55;10321:1400;;;10514:3;:20;;;10482:27;;10472:38;;;;;;;:::i;:::-;;;;;;;;:62;10447:158;;;;-1:-1:-1::0;;;10447:158:10::3;;;;;;;:::i;:::-;10794:13;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;10780:27:10::3;:10;-1:-1:-1::0;;;;;10780:27:10::3;;:101;;;;10811:70;10847:18;;10811:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;10867:13:10::3;::::0;-1:-1:-1;;;10867:13:10;;;::::3;::::0;::::3;;:::i;:::-;10811:20;::::0;::::3;;::::0;:70;:35:::3;:70::i;:::-;10755:192;;;;-1:-1:-1::0;;;10755:192:10::3;;;;;;;:::i;:::-;10974:38;11051:22;::::0;;;::::3;::::0;::::3;;:::i;:::-;10974:100;;11098:18;-1:-1:-1::0;;;;;11098:26:10::3;;11153:3;:11;;11142:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;11183:27;;11228:23;;11098:167;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11088:177:::0;-1:-1:-1;11443:48:10::3;11469:11;::::0;::::3;11443:21;11469::::0;;;::::3;11443:25;:48::i;:::-;11401:14:::0;;:17:::3;::::0;::::3;::::0;11379;;:40:::3;::::0;:21:::3;:40::i;:::-;:112;;11354:203;;;;-1:-1:-1::0;;;11354:203:10::3;;;;;;;:::i;:::-;10321:1400;;;;11689:21;;::::0;;;;;11699:11:::3;::::0;::::3;11689:21;:::i;:::-;;;10321:1400;11817:41;11837:11;::::0;;;::::3;::::0;::::3;;:::i;:::-;11850:7;11817:19;:41::i;:::-;11896:195;11926:10;11950:3;11967:15;11996:27;;12037:23;;12074:7;11896:195;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;;;;9214:2884:10:o;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1322:447::-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;2174:238:10:-;2332:22;;:::i;:::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2377:28:10::2;::::0;;;:16:::2;:28;::::0;;;;;;;;2370:35;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;;::::0;::::2;;;;::::0;;;;;;;;2174:238::o;3827:3983::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;4028:3:10;1385:4:::2;1355:18;;::::0;::::2;4028:3:::0;1355:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1355:35:10::2;;:73;;;;-1:-1:-1::0;1423:5:10::2;::::0;-1:-1:-1;;;;;1423:5:10::2;1410:9;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1410:18:10::2;;1355:73;:107;;;;-1:-1:-1::0;1459:3:10::2;::::0;-1:-1:-1;;;;;1459:3:10::2;1448:7;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1448:14:10::2;;1355:107;1334:185;;;;-1:-1:-1::0;;;1334:185:10::2;;;;;;;:::i;:::-;4135:19:::0;4127:63:::3;;;;-1:-1:-1::0;;;4127:63:10::3;;;;;;;:::i;:::-;4221:33:::0;;::::3;;4200:115;;;;-1:-1:-1::0;;;4200:115:10::3;;;;;;;:::i;:::-;4442:14;:31:::0;4417:21:::3;4434:3:::0;4417:16:::3;:21::i;:::-;:56;4396:139;;;;-1:-1:-1::0;;;4396:139:10::3;;;;;;;:::i;:::-;4604:15;:13;:15::i;:::-;4596:57;;;;-1:-1:-1::0;;;4596:57:10::3;;;;;;;:::i;:::-;5018:9;5013:2659;5033:19:::0;;::::3;5013:2659;;;5073:15;5091:8;;5100:1;5091:11;;;;;;;;;;;;;;;;;;;;:::i;:::-;5073:29:::0;-1:-1:-1;5192:13:10::3;5223:18:::0;;::::3;5219:564;;;5332:7;;5340:1;5332:10;;;;;;;;;;;;;5324:18;;5400:3;:12;;;;;;;;:::i;:::-;5413:5;5400:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5389:30:10::3;:7;-1:-1:-1::0;;;;;5389:30:10::3;;5360:131;;;;-1:-1:-1::0;;;5360:131:10::3;;;;;;;:::i;:::-;5219:564;;;-1:-1:-1::0;5598:1:10::3;5585:184;5609:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;5601:5;:27;5585:184;;;5676:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;5689:5;5676:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5665:30:10::3;:7;-1:-1:-1::0;;;;;5665:30:10::3;;5661:90;;;5723:5;;5661:90;5630:7;;5585:184;;;6203:19;6255:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;6246:5;:28;6245:127;;6349:16;;::::0;::::3;:3:::0;:16:::3;:::i;:::-;6366:5;6349:23;;;;;;;;;;;;;6245:127;;;1096:1;6245:127;-1:-1:-1::0;;;;;6419:21:10;::::3;;::::0;;;:12:::3;:21;::::0;;;;;6203:169;;-1:-1:-1;6419:35:10;-1:-1:-1;6390:146:10::3;;;;-1:-1:-1::0;;;6390:146:10::3;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6554:21:10;::::3;;::::0;;;:12:::3;:21;::::0;;;;:35;;;;6670:31:::3;6567:7:::0;6670:22:::3;:31::i;:::-;6652:49;;6715:13;6731:29;6752:7;6731:20;:29::i;:::-;6715:45;;6775:22;;:::i;:::-;6825:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;6816:5;:28;6812:752;;;6964:137;;;;;;;;;;;;;;;;7003:7;6964:137;;;;7012:5;6964:137;;::::0;::::3;;;;;;;;;;;;7053:3;:9;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6964:137:10::3;-1:-1:-1::0;;;;;6964:137:10::3;;;;;7073:3;:7;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6964:137:10::3;::::0;;;;6954:147;-1:-1:-1;6812:752:10::3;;;7206:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;7219:5;7206:19;;;;;;;;;;;;7196:29;;;;;;;;;;:::i;:::-;::::0;-1:-1:-1;7307:103:10::3;7363:22;;::::0;::::3;:3:::0;:22:::3;:::i;:::-;7386:5;7363:29;;;;;;;;;;;;;7353:7;:39;7307:7;:14;;;7322:1;7307:17;;;;;;;;;;::::0;;:24:::3;:103::i;:::-;7287:14:::0;;:123;7448:101:::3;7502:22;;::::0;::::3;::::0;::::3;:::i;:::-;7525:5;7502:29;;;;;;;;;;;;;7494:5;:37;7448:7;:14;;;7463:1;7448:17;;;;;;:101;7428:14:::0;;:17:::3;;:121:::0;6812:752:::3;7624:37;7644:7;7653;7624:19;:37::i;:::-;-1:-1:-1::0;;5054:3:10::3;::::0;;::::3;::::0;-1:-1:-1;5013:2659:10::3;::::0;-1:-1:-1;;5013:2659:10::3;;;7687:116;7716:10;7740:3;7757:14;7785:8;;7687:116;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;3827:3983:10:o;3046:910:11:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;3373:10:11::2;-1:-1:-1::0;;;;;3373:19:11;::::2;;::::0;:41:::2;;;3405:9;-1:-1:-1::0;;;;;3396:18:11::2;:5;-1:-1:-1::0;;;;;3396:18:11::2;;3373:41;3352:112;;;;-1:-1:-1::0;;;3352:112:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3565:23:11;;::::2;3475:14;3565:23:::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;;;3504:105:::2;::::0;3540:7;;3504:18:::2;:105::i;:::-;3475:134;;3670:1;3661:6;:10;3653:38;;;;-1:-1:-1::0;;;3653:38:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3827:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;:42:::2;::::0;3862:6;3827:34:::2;:42::i;:::-;-1:-1:-1::0;;;;;3772:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:52;;::::2;::::0;;;;;;:97;3908:41:::2;3787:7:::0;3931:9;3942:6;3908:13:::2;:41::i;:::-;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;3046:910:11:o;7816:1392:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;7992:3:10;1662:4:::2;1632:18;;::::0;::::2;7992:3:::0;1632:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1632:35:10::2;;1611:114;;;;-1:-1:-1::0;;;1611:114:10::2;;;;;;;:::i;:::-;8100:25:::3;8128:22;8146:3;8128:17;:22::i;:::-;8100:50;;8160:126;8191:15;;8220:14;:25;;;8259:17;8160;:126::i;:::-;8400:15;:13;:15::i;:::-;8392:57;;;;-1:-1:-1::0;;;8392:57:10::3;;;;;;;:::i;:::-;8579:14;::::0;;::::3;;8508:39;8562:32:::0;;;:16:::3;:32:::0;;;;;;8692:37:::3;::::0;::::3;::::0;:42;8671:130:::3;;;;-1:-1:-1::0;;;8671:130:10::3;;;;;;;:::i;:::-;8859:53:::0;;;9027:62:::3;:15;9060:19;::::0;::::3;;9027;:62::i;:::-;8987:37;::::0;::::3;:102:::0;9105:96:::3;::::0;::::3;::::0;::::3;::::0;9135:10:::3;::::0;9159:3;;8987:15;;9105:96:::3;:::i;1752:848:13:-:0;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1917:25:13::2;1934:7:::0;1917:16:::2;:25::i;:::-;1913:540;;;1979:6;1966:9;:19;1958:58;;;;-1:-1:-1::0;;;1958:58:13::2;;;;;;;:::i;:::-;1913:540;;;2121:9;:14:::0;2113:60:::2;;;;-1:-1:-1::0;;;2113:60:13::2;;;;;;;:::i;:::-;2212:163;2255:7;2284:10;2324:4;2351:6;2212:21;:163::i;:::-;2187:255;;;;-1:-1:-1::0;;;2187:255:13::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2515:22:13;::::2;;::::0;;;:13:::2;:22;::::0;;;;;;:32;;;::::2;::::0;;2562:31;::::2;::::0;::::2;::::0;2529:7;;2541:6;;2562:31:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;1752:848:13:o;789:226::-;947:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;977:31:13::2;1000:7;977:22;:31::i;:::-;970:38:::0;789:226;-1:-1:-1;;789:226:13:o;1182:222::-;1338:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1368:29:13::2;1389:7;1368:20;:29::i;2418:1403:10:-:0;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;2623:3:10;1385:4:::2;1355:18;;::::0;::::2;2623:3:::0;1355:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1355:35:10::2;;:73;;;;-1:-1:-1::0;1423:5:10::2;::::0;-1:-1:-1;;;;;1423:5:10::2;1410:9;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1410:18:10::2;;1355:73;:107;;;;-1:-1:-1::0;1459:3:10::2;::::0;-1:-1:-1;;;;;1459:3:10::2;1448:7;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1448:14:10::2;;1355:107;1334:185;;;;-1:-1:-1::0;;;1334:185:10::2;;;;;;;:::i;:::-;2663:15:::3;2681:21;2698:3;2681:16;:21::i;:::-;2663:39;;2780:78;2815:3;2820:7;2829:14;;2845:12;;2780:34;:78::i;:::-;2937:15;:13;:15::i;:::-;2936:16;2928:58;;;;-1:-1:-1::0;;;2928:58:10::3;;;;;;;:::i;:::-;3084:20:::0;;3107:9:::3;::::0;::::3;;-1:-1:-1::0;3063:108:10::3;;;;-1:-1:-1::0;;;3063:108:10::3;;;;;;;:::i;:::-;3187:18;:16;:18::i;:::-;3182:372;;3398:32;:15;3418:11;::::0;::::3;;3398:19;:32::i;:::-;3365:30:::0;:65;3474:69:::3;3511:18;:11;::::0;::::3;;3527:1;3511:15;:18::i;:::-;3474:15;::::0;:19:::3;:69::i;:::-;3444:27:::0;:99;3182:372:::3;3593:14;:41:::0;;;3667:9:::3;::::0;::::3;;3644:20:::0;:32;3714:14:::3;::::0;::::3;;3686:25:::0;:42;3766:48:::3;::::0;::::3;::::0;::::3;::::0;3782:10:::3;::::0;3667:3;;3766:48:::3;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;2418:1403:10:o;1238:218:11:-;1394:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1424:25:11::2;;::::0;;;:16:::2;:25;::::0;;;;;;1238:218::o;1959:209:10:-;2110:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2140:21:10::2;;::::0;;;:12:::2;:21;::::0;;;;;;1959:209::o;2026:236:11:-;2195:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2225:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;;::::2;::::0;;;;;;;;;2026:236::o;1874:172:12:-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;1749:204:10:-;1888:21;;:::i;:::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;1925:21:10::2;::::0;;::::2;::::0;::::2;::::0;;1932:14:::2;1925:21:::0;;;;;::::2;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;1749:204;:::o;356:19:17:-;;;;:::o;13483:169:10:-;13589:7;13640:3;13629:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;13619:26;;;;;;13612:33;;13483:169;;;:::o;548:229:33:-;686:4;757:13;-1:-1:-1;;;;;709:61:33;:44;737:4;743:9;709:27;:44::i;:::-;-1:-1:-1;;;;;709:61:33;;;548:229;-1:-1:-1;;;;548:229:33:o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:5;;;;;;;:::i;:::-;1042:1;874:176;-1:-1:-1;;;874:176:5:o;1706:314:11:-;1822:9;1817:197;1841:1;1837;:5;1817:197;;;1880:14;;1863;;1895:1;1880:17;;;;;;;;;;;;-1:-1:-1;1915:10:11;;1911:93;;1945:44;1958:7;1967;:10;;;1978:1;1967:13;;;;;;;;;;;1982:6;1945:12;:44::i;:::-;-1:-1:-1;1844:3:11;;1817:197;;;;1706:314;;:::o;382:54:17:-;307:1;418:4;:11;382:54::o;13310:167:10:-;13414:7;13465:3;13454:15;;;;;;;;:::i;13104:200::-;13152:4;13221:15;13187:14;:30;;;:49;;:110;;;;-1:-1:-1;13270:27:10;;13252:15;:45;13187:110;13168:129;;13104:200;:::o;1021:155:13:-;-1:-1:-1;;;;;1147:22:13;1117:7;1147:22;;;:13;:22;;;;;;;1021:155::o;1495:251::-;-1:-1:-1;;;;;1717:22:13;;1589:7;1717:22;;;:13;:22;;;;;;;;;1677:16;:25;;;;;;1631:31;1731:7;1631:22;:31::i;:::-;:71;:108;;1495:251;-1:-1:-1;;1495:251:13:o;634:157:36:-;695:7;728:5;;;750:8;;;;:34;;-1:-1:-1;;750:34:36;743:41;634:157;-1:-1:-1;;;;634:157:36:o;2268:455:11:-;2379:7;2664:52;2673:9;2684:31;2707:7;2684:22;:31::i;:::-;2664:8;:52::i;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;2729:311:11:-;2861:33;2878:7;2887:6;2861:16;:33::i;:::-;2925:57;2955:7;2964:9;2975:6;2925:29;:57::i;:::-;2904:129;;;;-1:-1:-1;;;2904:129:11;;;;;;;:::i;12701:262:10:-;12857:37;12876:5;;12857:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12883:4:10;;-1:-1:-1;12889:4:10;;-1:-1:-1;12857:18:10;;-1:-1:-1;12857:37:10:i;:::-;12836:120;;;;-1:-1:-1;;;12836:120:10;;;;;;;:::i;:::-;12701:262;;;;:::o;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1200:442:34:-;1346:4;1381:254;1407:7;1538:6;1566:9;1597:6;1432:189;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1432:189:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:189:34;-1:-1:-1;;;1432:189:34;;;1381:8;:254::i;:::-;1362:273;1200:442;-1:-1:-1;;;;;1200:442:34:o;12104:591:10:-;12318:18;12372:27;12401:7;12361:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12351:59;;;;;;12318:92;;12441:52;12467:14;;12441:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12483:9:10;;-1:-1:-1;;;12483:9:10;;;;;;;:::i;:::-;12441:10;;:52;:25;:52::i;:::-;12420:132;;;;-1:-1:-1;;;12420:132:10;;;;;;;:::i;:::-;12583:48;12609:12;;12583:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12623:7:10;;-1:-1:-1;;;12623:7:10;;;;;;;:::i;12583:48::-;12562:126;;;;-1:-1:-1;;;12562:126:10;;;;;;;:::i;:::-;12104:591;;;;;;;:::o;12969:129::-;13061:30;;13043:15;:48;12969:129;:::o;2180:459:5:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:5;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:5;;;;;;;:::i;783:246:33:-;905:7;928:14;945:28;968:4;945:22;:28::i;:::-;928:45;;990:32;1004:6;1012:9;990:13;:32::i;1462:238:11:-;-1:-1:-1;;;;;1644:23:11;;;;;;;:14;:23;;;;;;;;:34;;;;;;;;;;:49;;1686:6;1644:41;:49::i;:::-;-1:-1:-1;;;;;1585:23:11;;;;;;;:14;:23;;;;;;;;:56;;;;;;;;;;;;;;:108;;;;-1:-1:-1;1462:238:11:o;763:223:32:-;826:7;864:16;872:7;864;:16::i;:::-;:115;;939:40;;-1:-1:-1;;;939:40:32;;-1:-1:-1;;;;;939:25:32;;;;;:40;;973:4;;939:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;864:115;;;-1:-1:-1;899:21:32;;763:223;-1:-1:-1;763:223:32:o;391:104:4:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:4;;391:104;-1:-1:-1;391:104:4:o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:5;;;1746:187::o;1112:120:11:-;-1:-1:-1;;;;;1190:25:11;;;;;;;:16;:25;;;;;:35;;;;;;;1112:120::o;2263:307:32:-;2401:4;2436:16;2444:7;2436;:16::i;:::-;:127;;2522:41;2536:7;2545:9;2556:6;2522:13;:41::i;:::-;2436:127;;;2471:32;2485:9;2496:6;2471:13;:32::i;497:779:3:-;588:4;627;588;642:515;666:5;:12;662:1;:16;642:515;;;699:20;722:5;728:1;722:8;;;;;;;;;;;;;;699:31;;765:12;749;:28;745:402;;917:12;931;900:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;890:55;;;;;;875:70;;745:402;;;1104:12;1118;1087:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1077:55;;;;;;1062:70;;745:402;-1:-1:-1;680:3:3;;642:515;;;-1:-1:-1;1249:20:3;;;;497:779;-1:-1:-1;;;497:779:3:o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;1035:303:33:-;1128:7;1325:4;1274:56;;;;;;;;:::i;1064:2068:2:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:2;;;;;;;:::i;1199:94::-;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:2;;;;;;;:::i;2642:154::-;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:2;;;;;;;:::i;2806:93::-;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:2;;-1:-1:-1;;3010:24:2;;;-1:-1:-1;;;;;;;3052:20:2;;3044:57;;;;-1:-1:-1;;;3044:57:2;;;;;;;:::i;:::-;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:2:o;1291:198:32:-;1414:4;1437:45;1455:7;1464:9;1475:6;1437:17;:45::i;992:293::-;1092:4;1113:12;1127:23;1166:9;-1:-1:-1;;;;;1166:14:32;1188:6;1166:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:87;;;;1209:48;1237:7;1246:10;1209:27;:48::i;:::-;-1:-1:-1;1274:4:32;;992:293;-1:-1:-1;;;;992:293:32:o;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;1648:374:34:-;1766:4;1801:214;1827:7;1946:9;1977:6;1852:149;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1852:149:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1852:149:34;-1:-1:-1;;;1852:149:34;;;1801:8;:214::i;-1:-1:-1:-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;:::i;470:352::-;;;600:3;593:4;585:6;581:17;577:27;567:2;;-1:-1;;608:12;567:2;-1:-1;638:20;;678:18;667:30;;664:2;;;-1:-1;;700:12;664:2;744:4;736:6;732:17;720:29;;795:3;744:4;;779:6;775:17;736:6;761:32;;758:41;755:2;;;812:1;;802:12;755:2;560:262;;;;;:::o;4552:336::-;;;4666:3;4659:4;4651:6;4647:17;4643:27;4633:2;;-1:-1;;4674:12;4633:2;-1:-1;4704:20;;4744:18;4733:30;;4730:2;;;-1:-1;;4766:12;4730:2;4810:4;4802:6;4798:17;4786:29;;4861:3;4810:4;4841:17;4802:6;4827:32;;4824:41;4821:2;;;4878:1;;4868:12;6075:168;;6195:3;6186:6;6181:3;6177:16;6173:26;6170:2;;;-1:-1;;6202:12;6170:2;-1:-1;6222:15;6163:80;-1:-1;6163:80::o;6299:169::-;;6420:3;6411:6;6406:3;6402:16;6398:26;6395:2;;;-1:-1;;6427:12;6753:241;;6857:2;6845:9;6836:7;6832:23;6828:32;6825:2;;;-1:-1;;6863:12;6825:2;85:6;72:20;97:33;124:5;97:33;:::i;7001:366::-;;;7122:2;7110:9;7101:7;7097:23;7093:32;7090:2;;;-1:-1;;7128:12;7090:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7180:63;-1:-1;7280:2;7319:22;;72:20;97:33;72:20;97:33;:::i;:::-;7288:63;;;;7084:283;;;;;:::o;7374:507::-;;;;7520:2;7508:9;7499:7;7495:23;7491:32;7488:2;;;-1:-1;;7526:12;7488:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7578:63;-1:-1;7678:2;7717:22;;72:20;97:33;72:20;97:33;:::i;:::-;7686:63;-1:-1;7786:2;7833:22;;217:20;242:41;217:20;242:41;:::i;:::-;7794:71;;;;7482:399;;;;;:::o;7888:366::-;;;8009:2;7997:9;7988:7;7984:23;7980:32;7977:2;;;-1:-1;;8015:12;7977:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8067:63;8167:2;8206:22;;;;6542:20;;-1:-1;;;7971:283::o;8261:257::-;;8373:2;8361:9;8352:7;8348:23;8344:32;8341:2;;;-1:-1;;8379:12;8341:2;4347:6;4341:13;85653:5;82885:13;82878:21;85631:5;85628:32;85618:2;;-1:-1;;85664:12;8525:241;;8629:2;8617:9;8608:7;8604:23;8600:32;8597:2;;;-1:-1;;8635:12;8597:2;-1:-1;4468:20;;8591:175;-1:-1;8591:175::o;8773:292::-;;8902:3;8890:9;8881:7;8877:23;8873:33;8870:2;;;-1:-1;;8909:12;8870:2;5067:20;5082:4;5067:20;:::i;:::-;2714:3;2707:4;2699:6;2695:17;2691:27;2681:2;;-1:-1;;2722:12;2681:2;2775:78;5082:4;2775:78;:::i;:::-;2859:16;2918:17;5082:4;2951:3;2947:27;2976:3;2947:27;2944:36;2941:2;;;-1:-1;;2983:12;2941:2;-1:-1;3003:206;2756:4;3025:1;3022:13;3003:206;;;6542:20;;3096:50;;76035:4;3160:14;;;;3188;;;;3050:1;3043:9;3003:206;;;3007:14;5171:72;5153:16;5146:98;980:3;961:17;2951:3;961:17;957:27;947:2;;-1:-1;;988:12;947:2;1041:86;5082:4;1041:86;:::i;:::-;1133:16;-1:-1;1133:16;;-1:-1;1192:17;-1:-1;8902:3;1221:27;;1218:36;-1:-1;1215:2;;;-1:-1;;1257:12;1215:2;-1:-1;1277:214;2756:4;1299:1;1296:13;1277:214;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;1370:58;;76035:4;1442:14;;;;1470;;;;;3050:1;1317:9;1277:214;;;-1:-1;;76035:4;5318:16;;5311:106;-1:-1;5322:5;8864:201;-1:-1;;;8864:201::o;9072:314::-;;9212:3;9200:9;9191:7;9187:23;9183:33;9180:2;;;-1:-1;;9219:12;9180:2;5627:20;5642:4;5627:20;:::i;:::-;3368:3;3361:4;3353:6;3349:17;3345:27;3335:2;;-1:-1;;3376:12;3335:2;3429:78;5642:4;3429:78;:::i;:::-;3513:16;3572:17;5642:4;3605:3;3601:27;3630:3;3601:27;3598:36;3595:2;;;-1:-1;;3637:12;3595:2;-1:-1;3657:217;3410:4;3679:1;3676:13;3657:217;;;6690:13;;3750:61;;76035:4;3825:14;;;;3853;;;;3704:1;3697:9;3657:217;;;3661:14;5731:83;5713:16;5706:109;1666:3;1647:17;3605:3;1647:17;1643:27;1633:2;;-1:-1;;1674:12;1633:2;1727:86;5642:4;1727:86;:::i;:::-;1819:16;-1:-1;1819:16;;-1:-1;1878:17;-1:-1;9212:3;1907:27;;1904:36;-1:-1;1901:2;;;-1:-1;;1943:12;1901:2;-1:-1;1963:225;3410:4;1985:1;1982:13;1963:225;;;387:6;381:13;399:41;434:5;399:41;:::i;:::-;2056:69;;76035:4;2139:14;;;;2167;;;;;3704:1;2003:9;1963:225;;9393:961;;;;;;9637:2;9625:9;9616:7;9612:23;9608:32;9605:2;;;-1:-1;;9643:12;9605:2;9701:17;9688:31;9739:18;;9731:6;9728:30;9725:2;;;-1:-1;;9761:12;9725:2;9791:89;9872:7;9863:6;9852:9;9848:22;9791:89;:::i;:::-;9781:99;;9945:2;9934:9;9930:18;9917:32;9903:46;;9739:18;9961:6;9958:30;9955:2;;;-1:-1;;9991:12;9955:2;10029:80;10101:7;10092:6;10081:9;10077:22;10029:80;:::i;:::-;10011:98;;-1:-1;10011:98;-1:-1;10174:2;10159:18;;10146:32;;-1:-1;10187:30;;;10184:2;;;-1:-1;;10220:12;10184:2;;10258:80;10330:7;10321:6;10310:9;10306:22;10258:80;:::i;:::-;9599:755;;;;-1:-1;9599:755;;-1:-1;10240:98;;;9599:755;-1:-1;;;9599:755::o;10361:897::-;;;;;;10573:2;10561:9;10552:7;10548:23;10544:32;10541:2;;;-1:-1;;10579:12;10541:2;10637:17;10624:31;10675:18;;10667:6;10664:30;10661:2;;;-1:-1;;10697:12;10661:2;10727:89;10808:7;10799:6;10788:9;10784:22;10727:89;:::i;:::-;10717:99;;10881:2;10870:9;10866:18;10853:32;10839:46;;10675:18;10897:6;10894:30;10891:2;;;-1:-1;;10927:12;10891:2;10965:64;11021:7;11012:6;11001:9;10997:22;10965:64;:::i;:::-;10947:82;;-1:-1;10947:82;-1:-1;11094:2;11079:18;;11066:32;;-1:-1;11107:30;;;11104:2;;;-1:-1;;11140:12;11104:2;;11178:64;11234:7;11225:6;11214:9;11210:22;11178:64;:::i;11265:598::-;;;;11458:3;11446:9;11437:7;11433:23;11429:33;11426:2;;;-1:-1;;11465:12;11426:2;11527:90;11609:7;11585:22;11527:90;:::i;:::-;11517:100;;11682:3;11671:9;11667:19;11654:33;11707:18;11699:6;11696:30;11693:2;;;-1:-1;;11729:12;11693:2;11767:80;11839:7;11830:6;11819:9;11815:22;11767:80;:::i;:::-;11420:443;;11749:98;;-1:-1;11749:98;;-1:-1;;;;11420:443::o;11870:1066::-;;;;;;;;12119:3;12107:9;12098:7;12094:23;12090:33;12087:2;;;-1:-1;;12126:12;12087:2;12188:90;12270:7;12246:22;12188:90;:::i;:::-;12178:100;;12343:3;12332:9;12328:19;12315:33;12368:18;;12360:6;12357:30;12354:2;;;-1:-1;;12390:12;12354:2;12428:64;12484:7;12475:6;12464:9;12460:22;12428:64;:::i;:::-;12410:82;;-1:-1;12410:82;-1:-1;12557:3;12542:19;;12529:33;;-1:-1;12571:30;;;12568:2;;;-1:-1;;12604:12;12568:2;12642:64;12698:7;12689:6;12678:9;12674:22;12642:64;:::i;:::-;12624:82;;-1:-1;12624:82;-1:-1;12771:3;12756:19;;12743:33;;-1:-1;12785:30;;;12782:2;;;-1:-1;;12818:12;12782:2;;12856:64;12912:7;12903:6;12892:9;12888:22;12856:64;:::i;:::-;12081:855;;;;-1:-1;12081:855;;-1:-1;12081:855;;;;12838:82;;-1:-1;;;12081:855::o;12943:263::-;;13058:2;13046:9;13037:7;13033:23;13029:32;13026:2;;;-1:-1;;13064:12;13026:2;-1:-1;6690:13;;13020:186;-1:-1;13020:186::o;14226:127::-;-1:-1;;;;;83203:54;14303:45;;14297:56::o;14621:645::-;;78279:6;78274:3;78267:19;78316:4;;78311:3;78307:14;14758:83;;14926:21;-1:-1;14953:291;14978:6;14975:1;14972:13;14953:291;;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;83203:54;14303:45;;13581:14;;;;79938:12;;;;678:18;14993:9;14953:291;;;-1:-1;15250:10;;14745:521;-1:-1;;;;;14745:521::o;17590:855::-;;78279:6;78274:3;78267:19;78316:4;;78311:3;78307:14;17779:108;;17999:21;-1:-1;18026:397;18051:6;18048:1;18045:13;18026:397;;;18632:4;;84043:3;84038;84025:30;84086:16;;;84079:27;;;36234:16;;;;-1:-1;;16443:321;77024:4;16465:1;16462:13;16443:321;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;-1:-1;;;;;83203:54;14303:45;;80082:12;;;;678:18;16483:9;;;;;13399:14;;16443:321;;;-1:-1;;;13876:4;13867:14;;;;78019;;;;;18073:1;18066:9;18026:397;;19363:447;78267:19;;;19363:447;-1:-1;;;;;19591:78;;19588:2;;;-1:-1;;19672:12;19588:2;78316:4;19707:6;19703:17;84048:6;84043:3;78316:4;78311:3;78307:14;84025:30;84086:16;;;;78316:4;84086:16;84079:27;;;-1:-1;84086:16;;19485:325;-1:-1;19485:325::o;20331:297::-;;78279:6;78274:3;78267:19;84048:6;84043:3;78316:4;78311:3;78307:14;84025:30;-1:-1;78316:4;84095:6;78311:3;84086:16;;84079:27;78316:4;85060:7;;85064:2;20614:6;85044:14;85040:28;78311:3;20583:39;;20576:46;;20431:197;;;;;:::o;20977:343::-;;21119:5;77370:12;78279:6;78274:3;78267:19;21212:52;21257:6;78316:4;78311:3;78307:14;78316:4;21238:5;21234:16;21212:52;:::i;:::-;85060:7;85044:14;-1:-1;;85040:28;21276:39;;;;78316:4;21276:39;;21067:253;-1:-1;;21067:253::o;35713:692::-;18632:4;84043:3;84038;84025:30;84104:1;18632:4;84086:16;;;84079:27;;;36234:16;;;;16443:321;77024:4;16465:1;16462:13;16443:321;;;80091:2;230:6;217:20;242:41;277:5;242:41;:::i;:::-;-1:-1;;;;;83203:54;14303:45;;80082:12;;;;13399:14;;;;678:18;16483:9;16443:321;;;16447:14;;;35821:584;;:::o;38957:1345::-;39194:23;;19980:37;;39434:4;39423:16;;39417:23;39584:4;39575:14;;19980:37;39662:4;39651:16;;39645:23;39812:4;39803:14;;19980:37;39895:4;39884:16;;39878:23;40045:4;40036:14;;19980:37;40125:4;40114:16;40108:23;40275:4;40266:14;;;19980:37;39084:1218::o;40398:3170::-;;40569:6;79947:2;40680:16;79938:12;40703:63;40751:14;79912:39;79938:12;40680:16;79912:39;:::i;:::-;40703:63;:::i;:::-;40829:50;40862:16;40855:5;40829:50;:::i;:::-;40809:70;;40885:63;79947:2;40937:3;40933:14;40919:12;40885:63;:::i;:::-;;41009:50;41053:4;41046:5;41042:16;41035:5;41009:50;:::i;:::-;41065:63;41053:4;41117:3;41113:14;41099:12;41065:63;:::i;:::-;;41208:77;41279:4;41272:5;41268:16;41261:5;41208:77;:::i;:::-;40569:6;41279:4;41309:3;41305:14;41298:38;41351:119;40569:6;40564:3;40560:16;41451:12;41437;41351:119;:::i;:::-;41343:127;;;;41556:104;41654:4;41647:5;41643:16;41636:5;41556:104;:::i;:::-;41706:3;41700:4;41696:14;41654:4;41684:3;41680:14;41673:38;41726:171;41892:4;41878:12;41864;41726:171;:::i;:::-;41718:179;;;;41993:77;42064:4;42057:5;42053:16;42046:5;41993:77;:::i;:::-;42116:3;42110:4;42106:14;42064:4;42094:3;42090:14;42083:38;42136:119;42250:4;42236:12;42222;42136:119;:::i;:::-;42128:127;;;;42351:77;42422:4;42415:5;42411:16;42404:5;42351:77;:::i;:::-;42474:3;42468:4;42464:14;42422:4;42452:3;42448:14;42441:38;42494:119;42608:4;42594:12;42580;42494:119;:::i;:::-;42486:127;;;;42703:77;42774:4;42767:5;42763:16;42756:5;42703:77;:::i;:::-;42826:3;42820:4;42816:14;42774:4;42804:3;42800:14;42793:38;42846:119;42960:4;42946:12;42932;42846:119;:::i;:::-;43080:6;43069:18;;;6542:20;43142:16;;;19980:37;43266:6;43255:18;;;6542:20;43328:16;;;19980:37;43457:6;43446:18;;;4468:20;43519:16;;;;19980:37;;;;-1:-1;42838:127;;40542:3026;-1:-1;;;40542:3026::o;43666:1977::-;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;83203:54;;;14303:45;;79947:2;79938:12;;;4468:20;44200:14;;;19980:37;44335:4;44324:16;;72:20;;97:33;72:20;97:33;:::i;:::-;83203:54;44335:4;44395:14;;14303:45;44477:50;44521:4;44510:16;;44514:5;44477:50;:::i;:::-;44533:63;44521:4;44585:3;44581:14;44567:12;44533:63;:::i;:::-;;44663:50;44707:4;44700:5;44696:16;44689:5;44663:50;:::i;:::-;44719:63;44707:4;44771:3;44767:14;44753:12;44719:63;:::i;:::-;;44847:50;44891:4;44884:5;44880:16;44873:5;44847:50;:::i;:::-;44903:63;44891:4;44955:3;44951:14;44937:12;44903:63;:::i;:::-;;45114:115;45102:4;45218:3;45214:14;45102:4;45095:5;45091:16;45114:115;:::i;:::-;45346:6;45335:18;;;6542:20;45408:16;;;19980:37;45543:6;45532:18;;;4468:20;45605:16;;19980:37;43804:1839::o;46507:896::-;46751:23;;19980:37;;47007:4;46996:16;;46990:23;47157:4;47148:14;;19980:37;47235:4;47224:16;47218:23;82414:4;82403:16;82885:13;82878:21;47376:4;47367:14;;;19873:34;46640:763::o;47754:392::-;19980:37;;;48007:2;47998:12;;19980:37;48109:12;;;47898:248::o;48153:291::-;;84048:6;84043:3;84038;84025:30;84086:16;;84079:27;;;84086:16;48297:147;-1:-1;48297:147::o;48451:271::-;;21487:5;77370:12;21598:52;21643:6;21638:3;21631:4;21624:5;21620:16;21598:52;:::i;:::-;21662:16;;;;;48585:137;-1:-1;;48585:137::o;48729:520::-;31722:66;31702:87;;31686:2;31808:12;;19980:37;;;;49212:12;;;48946:303::o;49256:379::-;49620:10;49444:191::o;49642:222::-;-1:-1;;;;;83203:54;;;;14303:45;;49769:2;49754:18;;49740:124::o;49871:771::-;-1:-1;;;;;83203:54;;14156:58;;50193:3;50320:2;50305:18;;50298:48;;;49871:771;;50360:128;;50178:19;;50474:6;50360:128;:::i;:::-;50352:136;;50499:133;50628:2;50617:9;50613:18;50604:6;50499:133;:::i;50649:1051::-;-1:-1;;;;;83203:54;;14156:58;;51059:3;51186:2;51171:18;;51164:48;;;50649:1051;;51226:128;51044:19;;;51340:6;51226:128;:::i;:::-;51218:136;;51365:133;51494:2;51483:9;51479:18;51470:6;51365:133;:::i;:::-;51547:9;51541:4;51537:20;51531:3;51520:9;51516:19;51509:49;51572:118;51685:4;51676:6;51668;51572:118;:::i;:::-;51564:126;51030:670;-1:-1;;;;;;;;51030:670::o;51707:740::-;-1:-1;;;;;83203:54;;14156:58;;52037:3;52022:19;;52142:144;52282:2;52267:18;;52258:6;52142:144;:::i;:::-;52297:140;52432:3;52421:9;52417:19;52408:6;52297:140;:::i;52454:1384::-;-1:-1;;;;;83203:54;;14156:58;;52454:1384;52974:3;53219:2;53079:144;53204:18;;;53195:6;53079:144;:::i;:::-;53234:140;53369:3;53358:9;53354:19;53345:6;53234:140;:::i;:::-;52974:3;53407;53396:9;53392:19;53385:49;53448:86;52974:3;52963:9;52959:19;53520:6;53512;53448:86;:::i;:::-;53440:94;;53583:9;53577:4;53573:20;53567:3;53556:9;53552:19;53545:49;53608:86;53689:4;53680:6;53672;53608:86;:::i;:::-;37410:23;;53600:94;;-1:-1;37410:23;-1:-1;19069:1;53823:3;53808:19;;19054:258;77024:4;19076:1;19073:13;19054:258;;;19140:13;;19980:37;;77631:14;;;;19101:1;19094:9;;;;;14049:14;;19054:258;;;19058:14;;53219:2;37618:5;37614:16;37608:23;37588:43;;37747:14;53812:9;37747:14;19069:1;17243:282;77024:4;17265:1;17262:13;17243:282;;;82677:24;17335:6;17329:13;82677:24;:::i;:::-;14303:45;;77631:14;;;;13399;;;;19101:1;17283:9;17243:282;;;17247:14;;;;52945:893;;;;;;;;;;;:::o;53845:444::-;-1:-1;;;;;83203:54;;;14303:45;;83203:54;;;;54192:2;54177:18;;14303:45;54275:2;54260:18;;19980:37;;;;54028:2;54013:18;;53999:290::o;54296:333::-;-1:-1;;;;;83203:54;;;;14303:45;;54615:2;54600:18;;19980:37;54451:2;54436:18;;54422:207::o;54636:548::-;19980:37;;;82414:4;82403:16;;;;55004:2;54989:18;;47707:35;55087:2;55072:18;;19980:37;55170:2;55155:18;;19980:37;54843:3;54828:19;;54814:370::o;55191:736::-;;55448:2;55469:17;55462:47;55523:76;55448:2;55437:9;55433:18;55585:6;55523:76;:::i;:::-;55647:9;55641:4;55637:20;55632:2;55621:9;55617:18;55610:48;55672:86;55753:4;55744:6;55736;55672:86;:::i;:::-;55664:94;;55806:9;55800:4;55796:20;55791:2;55780:9;55776:18;55769:48;55831:86;55912:4;55903:6;55895;55831:86;:::i;55934:367::-;56106:2;56091:18;;85279:1;85269:12;;85259:2;;85285:9;85259:2;21778:67;;;56287:2;56272:18;19980:37;56077:224;:::o;56308:310::-;;56455:2;56476:17;56469:47;56530:78;56455:2;56444:9;56440:18;56594:6;56530:78;:::i;56625:416::-;56825:2;56839:47;;;22436:2;56810:18;;;78267:19;22472:26;78307:14;;;22452:47;22518:12;;;56796:245::o;57048:416::-;57248:2;57262:47;;;22769:2;57233:18;;;78267:19;22805:34;78307:14;;;22785:55;-1:-1;;;22860:12;;;22853:28;22900:12;;;57219:245::o;57471:416::-;57671:2;57685:47;;;23151:2;57656:18;;;78267:19;23187:32;78307:14;;;23167:53;23239:12;;;57642:245::o;57894:416::-;58094:2;58108:47;;;23490:2;58079:18;;;78267:19;23526:33;78307:14;;;23506:54;23579:12;;;58065:245::o;58317:416::-;58517:2;58531:47;;;23830:2;58502:18;;;78267:19;23866:31;78307:14;;;23846:52;23917:12;;;58488:245::o;58740:416::-;58940:2;58954:47;;;58925:18;;;78267:19;24204:34;78307:14;;;24184:55;24258:12;;;58911:245::o;59163:416::-;59363:2;59377:47;;;24509:2;59348:18;;;78267:19;24545:33;78307:14;;;24525:54;24598:12;;;59334:245::o;59586:416::-;59786:2;59800:47;;;24849:2;59771:18;;;78267:19;24885:31;78307:14;;;24865:52;24936:12;;;59757:245::o;60009:416::-;60209:2;60223:47;;;25187:2;60194:18;;;78267:19;25223:27;78307:14;;;25203:48;25270:12;;;60180:245::o;60432:416::-;60632:2;60646:47;;;25521:2;60617:18;;;78267:19;25557:33;78307:14;;;25537:54;25610:12;;;60603:245::o;60855:416::-;61055:2;61069:47;;;25861:2;61040:18;;;78267:19;25897:29;78307:14;;;25877:50;25946:12;;;61026:245::o;61278:416::-;61478:2;61492:47;;;26197:2;61463:18;;;78267:19;26233:34;78307:14;;;26213:55;-1:-1;;;26288:12;;;26281:33;26333:12;;;61449:245::o;61701:416::-;61901:2;61915:47;;;26584:2;61886:18;;;78267:19;26620:33;78307:14;;;26600:54;26673:12;;;61872:245::o;62124:416::-;62324:2;62338:47;;;26924:2;62309:18;;;78267:19;26960:33;78307:14;;;26940:54;27013:12;;;62295:245::o;62547:416::-;62747:2;62761:47;;;27264:2;62732:18;;;78267:19;27300:34;78307:14;;;27280:55;-1:-1;;;27355:12;;;27348:26;27393:12;;;62718:245::o;62970:416::-;63170:2;63184:47;;;27644:2;63155:18;;;78267:19;27680:34;78307:14;;;27660:55;-1:-1;;;27735:12;;;27728:32;27779:12;;;63141:245::o;63393:416::-;63593:2;63607:47;;;28030:2;63578:18;;;78267:19;28066:30;78307:14;;;28046:51;28116:12;;;63564:245::o;63816:416::-;64016:2;64030:47;;;28367:2;64001:18;;;78267:19;28403:34;78307:14;;;28383:55;-1:-1;;;28458:12;;;28451:25;28495:12;;;63987:245::o;64239:416::-;64439:2;64453:47;;;28746:2;64424:18;;;78267:19;28782:28;78307:14;;;28762:49;28830:12;;;64410:245::o;64662:416::-;64862:2;64876:47;;;29081:2;64847:18;;;78267:19;29117:34;78307:14;;;29097:55;-1:-1;;;29172:12;;;29165:26;29210:12;;;64833:245::o;65085:416::-;65285:2;65299:47;;;29461:2;65270:18;;;78267:19;29497:34;78307:14;;;29477:55;-1:-1;;;29552:12;;;29545:25;29589:12;;;65256:245::o;65508:416::-;65708:2;65722:47;;;29840:2;65693:18;;;78267:19;29876:34;78307:14;;;29856:55;-1:-1;;;29931:12;;;29924:29;29972:12;;;65679:245::o;65931:416::-;66131:2;66145:47;;;30223:2;66116:18;;;78267:19;30259:34;78307:14;;;30239:55;-1:-1;;;30314:12;;;30307:25;30351:12;;;66102:245::o;66354:416::-;66554:2;66568:47;;;30602:2;66539:18;;;78267:19;-1:-1;;;78307:14;;;30618:40;30677:12;;;66525:245::o;66777:416::-;66977:2;66991:47;;;30928:2;66962:18;;;78267:19;30964:33;78307:14;;;30944:54;31017:12;;;66948:245::o;67200:416::-;67400:2;67414:47;;;31268:2;67385:18;;;78267:19;31304:34;78307:14;;;31284:55;-1:-1;;;31359:12;;;31352:28;31399:12;;;67371:245::o;67623:416::-;67823:2;67837:47;;;32059:2;67808:18;;;78267:19;-1:-1;;;78307:14;;;32075:38;32132:12;;;67794:245::o;68046:416::-;68246:2;68260:47;;;32383:2;68231:18;;;78267:19;32419:34;78307:14;;;32399:55;-1:-1;;;32474:12;;;32467:33;32519:12;;;68217:245::o;68469:416::-;68669:2;68683:47;;;32770:2;68654:18;;;78267:19;32806:26;78307:14;;;32786:47;32852:12;;;68640:245::o;68892:416::-;69092:2;69106:47;;;33408:2;69077:18;;;78267:19;-1:-1;;;78307:14;;;33424:45;33488:12;;;69063:245::o;69315:416::-;69515:2;69529:47;;;33739:2;69500:18;;;78267:19;33775:34;78307:14;;;33755:55;-1:-1;;;33830:12;;;33823:27;33869:12;;;69486:245::o;69738:416::-;69938:2;69952:47;;;34120:2;69923:18;;;78267:19;34156:34;78307:14;;;34136:55;-1:-1;;;34211:12;;;34204:25;34248:12;;;69909:245::o;70161:416::-;70361:2;70375:47;;;70346:18;;;78267:19;34535:34;78307:14;;;34515:55;34589:12;;;70332:245::o;70584:416::-;70784:2;70798:47;;;34840:2;70769:18;;;78267:19;34876:28;78307:14;;;34856:49;34924:12;;;70755:245::o;71007:416::-;71207:2;71221:47;;;71192:18;;;78267:19;35211:34;78307:14;;;35191:55;35265:12;;;71178:245::o;71430:416::-;71630:2;71644:47;;;35516:2;71615:18;;;78267:19;35552:34;78307:14;;;35532:55;-1:-1;;;35607:12;;;35600:29;35648:12;;;71601:245::o;71853:327::-;72032:3;72017:19;;72047:123;72021:9;72143:6;72047:123;:::i;72187:351::-;;72378:3;72367:9;72363:19;72355:27;;38116:16;38110:23;19987:3;19980:37;38282:4;38275:5;38271:16;38265:23;38282:4;38346:3;38342:14;19980:37;38442:4;38435:5;38431:16;38425:23;38442:4;38506:3;38502:14;19980:37;38607:4;38600:5;38596:16;38590:23;38607:4;38671:3;38667:14;19980:37;38769:4;38762:5;38758:16;38752:23;38769:4;38833:3;38829:14;19980:37;72349:189;;;;:::o;72545:410::-;;72742:2;72763:17;72756:47;72817:128;72742:2;72731:9;72727:18;72931:6;72817:128;:::i;72962:367::-;73161:3;73146:19;;73176:143;73150:9;73292:6;73176:143;:::i;73336:354::-;45975:23;;19980:37;;46163:4;46152:16;;;46146:23;46223:14;;;19980:37;46323:4;46312:16;;;46306:23;82885:13;82878:21;46377:14;;;19873:34;;;;73529:2;73514:18;;73500:190::o;73697:222::-;19980:37;;;73824:2;73809:18;;73795:124::o;73926:522::-;;;74077:11;74064:25;74128:48;;74152:8;74136:14;74132:29;74128:48;74108:18;74104:73;74094:2;;-1:-1;;74181:12;74094:2;74208:33;;74262:18;;;-1:-1;74300:18;74289:30;;74286:2;;;-1:-1;;74322:12;74286:2;74167:4;74350:13;;;;-1:-1;74402:17;;74136:14;74382:38;74372:49;;74369:2;;;74434:1;;74424:12;74455:549;;;74633:11;74620:25;74128:48;;74708:8;74692:14;74688:29;74684:48;74664:18;74660:73;74650:2;;-1:-1;;74737:12;74650:2;74764:33;;74818:18;;;-1:-1;74856:18;74845:30;;74842:2;;;-1:-1;;74878:12;74842:2;74723:4;74906:13;;-1:-1;74970:4;74958:17;;74692:14;74938:38;74928:49;;74925:2;;;74990:1;;74980:12;75540:256;75602:2;75596:9;75628:17;;;75703:18;75688:34;;75724:22;;;75685:62;75682:2;;;75760:1;;75750:12;75682:2;75602;75769:22;75580:216;;-1:-1;75580:216::o;79838:119::-;;85:6;72:20;97:33;124:5;97:33;:::i;80110:517::-;;;80250:3;80237:17;74128:48;;80318:8;80302:14;80298:29;80294:48;80274:18;80270:73;80260:2;;-1:-1;;80347:12;80260:2;80376:33;;80333:4;80465:16;;;-1:-1;80431:19;;-1:-1;80501:18;80490:30;;80487:2;;;80533:1;;80523:12;80487:2;80333:4;80584:6;80580:17;80302:14;80560:38;80550:8;80546:53;80543:2;;;80612:1;;80602:12;80761:544;;;80928:3;80915:17;74128:48;;80996:8;80980:14;80976:29;80972:48;80952:18;80948:73;80938:2;;-1:-1;;81025:12;80938:2;81054:33;;81011:4;81143:16;;;-1:-1;81109:19;;-1:-1;81179:18;81168:30;;81165:2;;;81211:1;;81201:12;81165:2;81270:4;81262:6;81258:17;80980:14;81238:38;81228:8;81224:53;81221:2;;;81290:1;;81280:12;83141:121;-1:-1;;;;;83203:54;;83186:76::o;84121:268::-;84186:1;84193:101;84207:6;84204:1;84201:13;84193:101;;;84274:11;;;84268:18;84255:11;;;84248:39;84229:2;84222:10;84193:101;;;84309:6;84306:1;84303:13;84300:2;;;-1:-1;;84186:1;84356:16;;84349:27;84170:219::o;85308:117::-;-1:-1;;;;;83203:54;;85367:35;;85357:2;;85416:1;;85406:12;85357:2;85351:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "2928600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "infinite",
                "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "infinite",
                "depositAlice(address,uint256)": "infinite",
                "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "infinite",
                "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "infinite",
                "exit(address,address,address)": "infinite",
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "getChannelDispute()": "infinite",
                "getDefundNonce(address)": "infinite",
                "getExitableAmount(address,address)": "infinite",
                "getTotalDepositsAlice(address)": "infinite",
                "getTotalDepositsBob(address)": "infinite",
                "getTotalTransferred(address)": "infinite",
                "getTransferDispute(bytes32)": "infinite",
                "lock()": "1138",
                "setup(address,address)": "infinite"
              },
              "internal": {
                "hashChannelState(struct ICMCAdjudicator.CoreChannelState calldata)": "infinite",
                "hashTransferState(struct ICMCAdjudicator.CoreTransferState calldata)": "infinite",
                "inConsensusPhase()": "820",
                "inDefundPhase()": "1667",
                "verifyMerkleProof(bytes32[] calldata,bytes32,bytes32)": "infinite",
                "verifySignaturesOnChannelStateHash(struct ICMCAdjudicator.CoreChannelState calldata,bytes32,bytes calldata,bytes calldata)": "infinite"
              }
            },
            "methodIdentifiers": {
              "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "4d3fcbda",
              "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "072f25fd",
              "depositAlice(address,uint256)": "635ae901",
              "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "c60939be",
              "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "5fd334d9",
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getChannelDispute()": "f19eb10e",
              "getDefundNonce(address)": "e7283a8d",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8",
              "getTotalTransferred(address)": "cefa5122",
              "getTransferDispute(bytes32)": "3ff0da16",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"}],\"name\":\"ChannelDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"ChannelDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedInitialState\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"indexed\":false,\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"TransferDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"TransferDisputed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"defundChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedInitialTransferState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedTransferResolver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responderSignature\",\"type\":\"bytes\"}],\"name\":\"defundTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"disputeChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProofData\",\"type\":\"bytes32[]\"}],\"name\":\"disputeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChannelDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getDefundNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"getTransferDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}}},\"title\":\"CMCAdjudicator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"Contains logic for disputing a single channel and all active         transfers associated with the channel. Contains two major phases:         (1) consensus: settle on latest channel state         (2) defund: remove assets and dispute active transfers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/CMCAdjudicator.sol\":\"CMCAdjudicator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"},\"@openzeppelin/contracts/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle trees (hash trees),\\n */\\nlibrary MerkleProof {\\n    /**\\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n     * defined by `root`. For this, a `proof` must be provided, containing\\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\\n     */\\n    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\\n        bytes32 computedHash = leaf;\\n\\n        for (uint256 i = 0; i < proof.length; i++) {\\n            bytes32 proofElement = proof[i];\\n\\n            if (computedHash <= proofElement) {\\n                // Hash(current computed hash + current element of the proof)\\n                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n            } else {\\n                // Hash(current element of the proof + current computed hash)\\n                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n            }\\n        }\\n\\n        // Check if the computed hash (root) is equal to the provided root\\n        return computedHash == root;\\n    }\\n}\\n\",\"keccak256\":\"0x4959be2683e7af3439cb94f06aa6c40cb42ca9336747d0c7dce54f07196489bc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/CMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/Commitment.sol\\\";\\nimport \\\"./interfaces/ICMCAdjudicator.sol\\\";\\nimport \\\"./interfaces/ITransferDefinition.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./CMCDeposit.sol\\\";\\nimport \\\"./lib/LibChannelCrypto.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/cryptography/MerkleProof.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\n/// @title CMCAdjudicator\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic for disputing a single channel and all active\\n///         transfers associated with the channel. Contains two major phases:\\n///         (1) consensus: settle on latest channel state\\n///         (2) defund: remove assets and dispute active transfers\\ncontract CMCAdjudicator is CMCCore, CMCAsset, CMCDeposit, ICMCAdjudicator {\\n    using LibChannelCrypto for bytes32;\\n    using LibMath for uint256;\\n    using SafeMath for uint256;\\n\\n    uint256 private constant INITIAL_DEFUND_NONCE = 1;\\n\\n    ChannelDispute private channelDispute;\\n    mapping(address => uint256) private defundNonces;\\n    mapping(bytes32 => TransferDispute) private transferDisputes;\\n\\n    modifier validateChannel(CoreChannelState calldata ccs) {\\n        require(\\n            ccs.channelAddress == address(this) &&\\n                ccs.alice == alice &&\\n                ccs.bob == bob,\\n            \\\"CMCAdjudicator: INVALID_CHANNEL\\\"\\n        );\\n        _;\\n    }\\n\\n    modifier validateTransfer(CoreTransferState calldata cts) {\\n        require(\\n            cts.channelAddress == address(this),\\n            \\\"CMCAdjudicator: INVALID_TRANSFER\\\"\\n        );\\n        _;\\n    }\\n\\n    function getChannelDispute()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (ChannelDispute memory)\\n    {\\n        return channelDispute;\\n    }\\n\\n    function getDefundNonce(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return defundNonces[assetId];\\n    }\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (TransferDispute memory)\\n    {\\n        return transferDisputes[transferId];\\n    }\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\\n        // Generate hash\\n        bytes32 ccsHash = hashChannelState(ccs);\\n\\n        // Verify Alice's and Bob's signature on the channel state\\n        verifySignaturesOnChannelStateHash(ccs, ccsHash, aliceSignature, bobSignature);\\n\\n        // We cannot dispute a channel in its defund phase\\n        require(!inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // New nonce must be strictly greater than the stored one\\n        require(\\n            channelDispute.nonce < ccs.nonce,\\n            \\\"CMCAdjudicator: INVALID_NONCE\\\"\\n        );\\n\\n        if (!inConsensusPhase()) {\\n            // We are not already in a dispute\\n            // Set expiries\\n            // TODO: offchain-ensure that there can't be an overflow\\n            channelDispute.consensusExpiry = block.timestamp.add(ccs.timeout);\\n            channelDispute.defundExpiry = block.timestamp.add(\\n                ccs.timeout.mul(2)\\n            );\\n        }\\n\\n        // Store newer state\\n        channelDispute.channelStateHash = ccsHash;\\n        channelDispute.nonce = ccs.nonce;\\n        channelDispute.merkleRoot = ccs.merkleRoot;\\n\\n        // Emit event\\n        emit ChannelDisputed(msg.sender, ccs, channelDispute);\\n    }\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\\n        // These checks are not strictly necessary, but it's a bit cleaner this way\\n        require(assetIds.length > 0, \\\"CMCAdjudicator: NO_ASSETS_GIVEN\\\");\\n        require(\\n            indices.length <= assetIds.length,\\n            \\\"CMCAdjudicator: WRONG_ARRAY_LENGTHS\\\"\\n        );\\n\\n        // Verify that the given channel state matches the stored one\\n        require(\\n            hashChannelState(ccs) == channelDispute.channelStateHash,\\n            \\\"CMCAdjudicator: INVALID_CHANNEL_HASH\\\"\\n        );\\n\\n        // We need to be in defund phase for that\\n        require(inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // TODO SECURITY: Beware of reentrancy\\n        // TODO: offchain-ensure that all arrays have the same length:\\n        // assetIds, balances, processedDepositsA, processedDepositsB, defundNonces\\n        // Make sure there are no duplicates in the assetIds -- duplicates are often a source of double-spends\\n\\n        // Defund all assets given\\n        for (uint256 i = 0; i < assetIds.length; i++) {\\n            address assetId = assetIds[i];\\n\\n            // Verify or find the index of the assetId in the ccs.assetIds\\n            uint256 index;\\n            if (i < indices.length) {\\n                // The index was supposedly given -- we verify\\n                index = indices[i];\\n                require(\\n                    assetId == ccs.assetIds[index],\\n                    \\\"CMCAdjudicator: INDEX_MISMATCH\\\"\\n                );\\n            } else {\\n                // we search through the assets in ccs\\n                for (index = 0; index < ccs.assetIds.length; index++) {\\n                    if (assetId == ccs.assetIds[index]) {\\n                        break;\\n                    }\\n                }\\n            }\\n\\n            // Now, if `index`  is equal to the number of assets in ccs,\\n            // then the current asset is not in ccs;\\n            // otherwise, `index` is the index in ccs for the current asset\\n\\n            // Check the assets haven't already been defunded + update the\\n            // defundNonce for that asset\\n            {\\n                // Open a new block to avoid \\\"stack too deep\\\" error\\n                uint256 defundNonce =\\n                    (index == ccs.assetIds.length)\\n                        ? INITIAL_DEFUND_NONCE\\n                        : ccs.defundNonces[index];\\n                require(\\n                    defundNonces[assetId] < defundNonce,\\n                    \\\"CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED\\\"\\n                );\\n                defundNonces[assetId] = defundNonce;\\n            }\\n\\n            // Get total deposits\\n            uint256 tdAlice = _getTotalDepositsAlice(assetId);\\n            uint256 tdBob = _getTotalDepositsBob(assetId);\\n\\n            Balance memory balance;\\n\\n            if (index == ccs.assetIds.length) {\\n                // The current asset is not a part of ccs; refund what has been deposited\\n                balance = Balance({\\n                    amount: [tdAlice, tdBob],\\n                    to: [payable(ccs.alice), payable(ccs.bob)]\\n                });\\n            } else {\\n                // Start with the final balances in ccs\\n                balance = ccs.balances[index];\\n                // Add unprocessed deposits\\n                balance.amount[0] = balance.amount[0].satAdd(\\n                    tdAlice - ccs.processedDepositsA[index]\\n                );\\n                balance.amount[1] = balance.amount[1].satAdd(\\n                    tdBob - ccs.processedDepositsB[index]\\n                );\\n            }\\n\\n            // Add result to exitable amounts\\n            makeBalanceExitable(assetId, balance);\\n        }\\n\\n        emit ChannelDefunded(\\n            msg.sender,\\n            ccs,\\n            channelDispute,\\n            assetIds\\n        );\\n    }\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\\n        // Verify that the given transfer state is included in the \\\"finalized\\\" channel state\\n        bytes32 transferStateHash = hashTransferState(cts);\\n        verifyMerkleProof(\\n            merkleProofData,\\n            channelDispute.merkleRoot,\\n            transferStateHash\\n        );\\n\\n        // The channel needs to be in defund phase for that, i.e. channel state is \\\"finalized\\\"\\n        require(inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // Get stored dispute for this transfer\\n        TransferDispute storage transferDispute =\\n            transferDisputes[cts.transferId];\\n\\n        // Verify that this transfer has not been disputed before\\n        require(\\n            transferDispute.transferDisputeExpiry == 0,\\n            \\\"CMCAdjudicator: TRANSFER_ALREADY_DISPUTED\\\"\\n        );\\n\\n        // Store transfer state and set expiry\\n        transferDispute.transferStateHash = transferStateHash;\\n        // TODO: offchain-ensure that there can't be an overflow\\n        transferDispute.transferDisputeExpiry = block.timestamp.add(\\n            cts.transferTimeout\\n        );\\n\\n        emit TransferDisputed(\\n            msg.sender,\\n            cts,\\n            transferDispute\\n        );\\n    }\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\\n        // Get stored dispute for this transfer\\n        TransferDispute storage transferDispute =\\n            transferDisputes[cts.transferId];\\n\\n        // Verify that a dispute for this transfer has already been started\\n        require(\\n            transferDispute.transferDisputeExpiry != 0,\\n            \\\"CMCAdjudicator: TRANSFER_NOT_DISPUTED\\\"\\n        );\\n\\n        // Verify that the given transfer state matches the stored one\\n        require(\\n            hashTransferState(cts) == transferDispute.transferStateHash,\\n            \\\"CMCAdjudicator: INVALID_TRANSFER_HASH\\\"\\n        );\\n\\n        // We can't defund twice\\n        require(\\n            !transferDispute.isDefunded,\\n            \\\"CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED\\\"\\n        );\\n        transferDispute.isDefunded = true;\\n\\n        Balance memory balance;\\n\\n        if (block.timestamp < transferDispute.transferDisputeExpiry) {\\n            // Ensure the correct hash is provided\\n            require(\\n                keccak256(encodedInitialTransferState) == cts.initialStateHash,\\n                \\\"CMCAdjudicator: INVALID_TRANSFER_HASH\\\"\\n            );\\n            \\n            // Before dispute expiry, responder or responder-authorized\\n            // agent (i.e. watchtower) can resolve\\n            require(\\n                msg.sender == cts.responder || cts.initialStateHash.checkSignature(responderSignature, cts.responder),\\n                \\\"CMCAdjudicator: INVALID_RESOLVER\\\"\\n            );\\n            \\n            ITransferDefinition transferDefinition =\\n                ITransferDefinition(cts.transferDefinition);\\n            balance = transferDefinition.resolve(\\n                abi.encode(cts.balance),\\n                encodedInitialTransferState,\\n                encodedTransferResolver\\n            );\\n            // Verify that returned balances don't exceed initial balances\\n            require(\\n                balance.amount[0].add(balance.amount[1]) <=\\n                    cts.balance.amount[0].add(cts.balance.amount[1]),\\n                \\\"CMCAdjudicator: INVALID_BALANCES\\\"\\n            );\\n        } else {\\n            // After dispute expiry, if the responder hasn't resolved, we defund the initial balance\\n            balance = cts.balance;\\n        }\\n\\n        // Depending on previous code path, defund either resolved or initial balance\\n        makeBalanceExitable(cts.assetId, balance);\\n\\n        // Emit event\\n        emit TransferDefunded(\\n            msg.sender,\\n            cts,\\n            transferDispute,\\n            encodedInitialTransferState,\\n            encodedTransferResolver,\\n            balance\\n        );\\n    }\\n\\n    function verifySignaturesOnChannelStateHash(\\n        CoreChannelState calldata ccs,\\n        bytes32 ccsHash,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) internal pure {\\n        bytes32 commitment =\\n            keccak256(abi.encode(CommitmentType.ChannelState, ccsHash));\\n        require(\\n            commitment.checkSignature(aliceSignature, ccs.alice),\\n            \\\"CMCAdjudicator: INVALID_ALICE_SIG\\\"\\n        );\\n        require(\\n            commitment.checkSignature(bobSignature, ccs.bob),\\n            \\\"CMCAdjudicator: INVALID_BOB_SIG\\\"\\n        );\\n    }\\n\\n    function verifyMerkleProof(\\n        bytes32[] calldata proof,\\n        bytes32 root,\\n        bytes32 leaf\\n    ) internal pure {\\n        require(\\n            MerkleProof.verify(proof, root, leaf),\\n            \\\"CMCAdjudicator: INVALID_MERKLE_PROOF\\\"\\n        );\\n    }\\n\\n    function inConsensusPhase() internal view returns (bool) {\\n        return block.timestamp < channelDispute.consensusExpiry;\\n    }\\n\\n    function inDefundPhase() internal view returns (bool) {\\n        return\\n            channelDispute.consensusExpiry <= block.timestamp &&\\n            block.timestamp < channelDispute.defundExpiry;\\n    }\\n\\n    function hashChannelState(CoreChannelState calldata ccs)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(ccs));\\n    }\\n\\n    function hashTransferState(CoreTransferState calldata cts)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(cts));\\n    }\\n}\\n\",\"keccak256\":\"0x351fb7770cbb6fbb6f3470e63d5a9e93c817722f9c8e2e5c62e38ebf8c6e389b\",\"license\":\"UNLICENSED\"},\"src.sol/CMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCAsset.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/Math.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title CMCAsset\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic to safely transfer channel assets (even if they are\\n///         noncompliant). During adjudication, balances from defunding the\\n///         channel or defunding transfers are registered as withdrawable. Once\\n///         they are registered, the owner (or a watchtower on behalf of the\\n///         owner), may call `exit` to reclaim funds from the multisig.\\n\\ncontract CMCAsset is CMCCore, ICMCAsset {\\n    using SafeMath for uint256;\\n    using LibMath for uint256;\\n\\n    mapping(address => uint256) internal totalTransferred;\\n    mapping(address => mapping(address => uint256))\\n        private exitableAmount;\\n\\n    function registerTransfer(address assetId, uint256 amount) internal {\\n        totalTransferred[assetId] += amount;\\n    }\\n\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return totalTransferred[assetId];\\n    }\\n\\n    function makeExitable(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal {\\n        exitableAmount[assetId][\\n            recipient\\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\\n    }\\n\\n    function makeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) internal {\\n        for (uint256 i = 0; i < 2; i++) {\\n            uint256 amount = balance.amount[i];\\n            if (amount > 0) {\\n                makeExitable(assetId, balance.to[i], amount);\\n            }\\n        }\\n    }\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return exitableAmount[assetId][owner];\\n    }\\n\\n    function getAvailableAmount(address assetId, uint256 maxAmount)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        // Taking the min protects against the case where the multisig\\n        // holds less than the amount that is trying to be withdrawn\\n        // while still allowing the total of the funds to be removed\\n        // without the transaction reverting.\\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\\n    }\\n\\n    function transferAsset(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal {\\n        registerTransfer(assetId, amount);\\n        require(\\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\\n            \\\"CMCAsset: TRANSFER_FAILED\\\"\\n        );\\n    }\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external override onlyViaProxy nonReentrant {\\n        // Either the owner must be the recipient, or in control\\n        // of setting the recipient of the funds to whomever they\\n        // choose\\n        require(\\n            msg.sender == owner || owner == recipient,\\n            \\\"CMCAsset: OWNER_MISMATCH\\\"\\n        );\\n\\n        uint256 amount =\\n            getAvailableAmount(\\n                assetId,\\n                exitableAmount[assetId][owner]\\n            );\\n\\n        // Revert if amount is 0\\n        require(amount > 0, \\\"CMCAsset: NO_OP\\\");\\n\\n        // Reduce the amount claimable from the multisig by the owner\\n        exitableAmount[assetId][\\n            owner\\n        ] = exitableAmount[assetId][owner].sub(amount);\\n\\n        // Perform transfer\\n        transferAsset(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x39c1bd81d8ec2a0fa7c23aad683017f5e2ec28a2db43643020649f935b5b74bf\",\"license\":\"UNLICENSED\"},\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/CMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCDeposit.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibERC20.sol\\\";\\n\\n/// @title CMCDeposit\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic supporting channel multisig deposits. Channel\\n///         funding is asymmetric, with `alice` having to call a deposit\\n///         function which tracks the total amount she has deposited so far,\\n///         and any other funds in the multisig being attributed to `bob`.\\n\\ncontract CMCDeposit is CMCCore, CMCAsset, ICMCDeposit {\\n    mapping(address => uint256) private depositsAlice;\\n\\n    receive() external payable onlyViaProxy nonReentrant {}\\n\\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsAlice(assetId);\\n    }\\n\\n    function _getTotalDepositsAlice(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return depositsAlice[assetId];\\n    }\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsBob(assetId);\\n    }\\n\\n    // Calculated using invariant onchain properties. Note we DONT use safemath here\\n    function _getTotalDepositsBob(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return\\n            LibAsset.getOwnBalance(assetId) +\\n            totalTransferred[assetId] -\\n            depositsAlice[assetId];\\n    }\\n\\n    function depositAlice(address assetId, uint256 amount)\\n        external\\n        payable\\n        override\\n        onlyViaProxy\\n        nonReentrant\\n    {\\n        if (LibAsset.isEther(assetId)) {\\n            require(msg.value == amount, \\\"CMCDeposit: VALUE_MISMATCH\\\");\\n        } else {\\n            // If ETH is sent along, it will be attributed to bob\\n            require(msg.value == 0, \\\"CMCDeposit: ETH_WITH_ERC_TRANSFER\\\");\\n            require(\\n                LibERC20.transferFrom(\\n                    assetId,\\n                    msg.sender,\\n                    address(this),\\n                    amount\\n                ),\\n                \\\"CMCDeposit: ERC20_TRANSFER_FAILED\\\"\\n            );\\n        }\\n        // NOTE: explicitly do NOT use safemath here\\n        depositsAlice[assetId] += amount;\\n        emit AliceDeposited(assetId, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x4d3dd828158289df93d6b5a6419bc5e8d95888aba81e62cd913af1e4c540bece\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Commitment.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nenum CommitmentType {ChannelState, WithdrawData}\\n\",\"keccak256\":\"0xabfb62d2dbe45e307fc08742f87d2ff5d6faa9ab065f0c2395dc4adcbe0a9c20\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibChannelCrypto.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/cryptography/ECDSA.sol\\\";\\n\\t\\t\\n/// @author Connext <support@connext.network>\\t\\t\\n/// @notice This library contains helpers for recovering signatures from a\\t\\t\\n///         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t\\n///         messages to prevent misuse of private keys by injected providers,\\t\\t\\n///         and instead only sign messages with a Vector channel prefix.\\nlibrary LibChannelCrypto {\\n    function checkSignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toChannelSignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toChannelSignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x16Vector Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    function checkUtilitySignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toUtilitySignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toUtilitySignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x17Utility Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xb8aa3679b75f2a1a5785f614f5dff9a76a689c18caa56a8df1f4e3c3167d6ece\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              },
              {
                "astId": 2348,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "totalTransferred",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2354,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "exitableAmount",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 2732,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "depositsAlice",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 1503,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "channelDispute",
                "offset": 0,
                "slot": "6",
                "type": "t_struct(ChannelDispute)3596_storage"
              },
              {
                "astId": 1507,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "defundNonces",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 1511,
                "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                "label": "transferDisputes",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_bytes32,t_struct(TransferDispute)3603_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_struct(TransferDispute)3603_storage)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute)",
                "numberOfBytes": "32",
                "value": "t_struct(TransferDispute)3603_storage"
              },
              "t_struct(ChannelDispute)3596_storage": {
                "encoding": "inplace",
                "label": "struct ICMCAdjudicator.ChannelDispute",
                "members": [
                  {
                    "astId": 3587,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "channelStateHash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3589,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "nonce",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3591,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "merkleRoot",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3593,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "consensusExpiry",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3595,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "defundExpiry",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "160"
              },
              "t_struct(TransferDispute)3603_storage": {
                "encoding": "inplace",
                "label": "struct ICMCAdjudicator.TransferDispute",
                "members": [
                  {
                    "astId": 3598,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "transferStateHash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3600,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "transferDisputeExpiry",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3602,
                    "contract": "src.sol/CMCAdjudicator.sol:CMCAdjudicator",
                    "label": "isDefunded",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_bool"
                  }
                ],
                "numberOfBytes": "96"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "Contains logic for disputing a single channel and all active         transfers associated with the channel. Contains two major phases:         (1) consensus: settle on latest channel state         (2) defund: remove assets and dispute active transfers",
            "version": 1
          }
        }
      },
      "src.sol/CMCAsset.sol": {
        "CMCAsset": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              }
            },
            "title": "CMCAsset",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b608052610d1061004a60003980610118528061019c52806102b2528061042952806104b2528061054b5250610d106000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063cefa51221161005b578063cefa5122146100c8578063e9852569146100e8578063eeb30fea146100fb578063f83d08ba146101035761007d565b8063241686a0146100825780632d34ba79146100a05780635bc9d96d146100b5575b600080fd5b61008a61010b565b6040516100979190610a5b565b60405180910390f35b6100b36100ae366004610982565b610191565b005b6100b36100c33660046109ba565b6102a7565b6100db6100d6366004610966565b61041c565b6040516100979190610c89565b6100db6100f6366004610982565b6104a5565b61008a61053e565b6100db6105bb565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561015f5760405162461bcd60e51b815260040161015690610c52565b60405180910390fd5b6001600054146101815760405162461bcd60e51b815260040161015690610b8b565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101da5760405162461bcd60e51b815260040161015690610c52565b6001546001600160a01b0316156102035760405162461bcd60e51b815260040161015690610c22565b6001600160a01b0382161580159061022357506001600160a01b03811615155b61023f5760405162461bcd60e51b815260040161015690610b29565b806001600160a01b0316826001600160a01b031614156102715760405162461bcd60e51b815260040161015690610abb565b6102796105c1565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156102f05760405162461bcd60e51b815260040161015690610c52565b6001600054146103125760405162461bcd60e51b815260040161015690610b8b565b6002600055336001600160a01b038316148061033f5750806001600160a01b0316826001600160a01b0316145b61035b5760405162461bcd60e51b815260040161015690610beb565b6001600160a01b03808416600090815260046020908152604080832093861683529290529081205461038e9085906105c8565b9050600081116103b05760405162461bcd60e51b815260040161015690610bc2565b6001600160a01b038085166000908152600460209081526040808320938716835292905220546103e090826105e3565b6001600160a01b03808616600090815260046020908152604080832093881683529290522055610411848383610625565b505060016000555050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104675760405162461bcd60e51b815260040161015690610c52565b6001600054146104895760405162461bcd60e51b815260040161015690610b8b565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104f05760405162461bcd60e51b815260040161015690610c52565b6001600054146105125760405162461bcd60e51b815260040161015690610b8b565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156105895760405162461bcd60e51b815260040161015690610c52565b6001600054146105ab5760405162461bcd60e51b815260040161015690610b8b565b506001546001600160a01b031690565b60005481565b6001600055565b60006105dc826105d78561065b565b6106f3565b9392505050565b60006105dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610709565b61062f8382610735565b61063a838383610757565b6106565760405162461bcd60e51b815260040161015690610af2565b505050565b600061066682610788565b6106eb576040516370a0823160e01b81526001600160a01b038316906370a0823190610696903090600401610a5b565b60206040518083038186803b1580156106ae57600080fd5b505afa1580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e69190610a24565b6106ed565b475b92915050565b600081831061070257816105dc565b5090919050565b6000818484111561072d5760405162461bcd60e51b81526004016101569190610a88565b505050900390565b6001600160a01b03909116600090815260036020526040902080549091019055565b600061076284610788565b61077657610771848484610795565b610780565b61078083836107a2565b949350505050565b6001600160a01b03161590565b600061078084848461081a565b6000806060846001600160a01b0316846040516107be90610a58565b60006040518083038185875af1925050503d80600081146107fb576040519150601f19603f3d011682016040523d82523d6000602084013e610800565b606091505b509150915061080f8282610862565b506001949350505050565b6000610780848484604051602401610833929190610a6f565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610873565b8161086f57805160208201fd5b5050565b600061087e8361092d565b61089a5760405162461bcd60e51b815260040161015690610b60565b60006060846001600160a01b0316846040516108b69190610a3c565b6000604051808303816000865af19150503d80600081146108f3576040519150601f19603f3d011682016040523d82523d6000602084013e6108f8565b606091505b50915091506109078282610862565b805115806109245750808060200190518101906109249190610a04565b95945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610780575050151592915050565b600060208284031215610977578081fd5b81356105dc81610cc2565b60008060408385031215610994578081fd5b823561099f81610cc2565b915060208301356109af81610cc2565b809150509250929050565b6000806000606084860312156109ce578081fd5b83356109d981610cc2565b925060208401356109e981610cc2565b915060408401356109f981610cc2565b809150509250925092565b600060208284031215610a15578081fd5b815180151581146105dc578182fd5b600060208284031215610a35578081fd5b5051919050565b60008251610a4e818460208701610c92565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610aa7816040850160208701610c92565b601f01601f19169190910160400192915050565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b90815260200190565b60005b83811015610cad578181015183820152602001610c95565b83811115610cbc576000848401525b50505050565b6001600160a01b0381168114610cd757600080fd5b5056fea2646970667358221220a4ebe9893bd73239a3cbe9e70f1a464bdf5a69da62d4539058d08f7cbe81e08d64736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0xD10 PUSH2 0x4A PUSH1 0x0 CODECOPY DUP1 PUSH2 0x118 MSTORE DUP1 PUSH2 0x19C MSTORE DUP1 PUSH2 0x2B2 MSTORE DUP1 PUSH2 0x429 MSTORE DUP1 PUSH2 0x4B2 MSTORE DUP1 PUSH2 0x54B MSTORE POP PUSH2 0xD10 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCEFA5122 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x103 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x241686A0 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x10B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB3 PUSH2 0xAE CALLDATASIZE PUSH1 0x4 PUSH2 0x982 JUMP JUMPDEST PUSH2 0x191 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB3 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x9BA JUMP JUMPDEST PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0xDB PUSH2 0xD6 CALLDATASIZE PUSH1 0x4 PUSH2 0x966 JUMP JUMPDEST PUSH2 0x41C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xC89 JUMP JUMPDEST PUSH2 0xDB PUSH2 0xF6 CALLDATASIZE PUSH1 0x4 PUSH2 0x982 JUMP JUMPDEST PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x53E JUMP JUMPDEST PUSH2 0xDB PUSH2 0x5BB JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x181 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x203 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x223 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x23F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB29 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x271 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xABB JUMP JUMPDEST PUSH2 0x279 PUSH2 0x5C1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x33F JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x35B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x38E SWAP1 DUP6 SWAP1 PUSH2 0x5C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x3B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xBC2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3E0 SWAP1 DUP3 PUSH2 0x5E3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x411 DUP5 DUP4 DUP4 PUSH2 0x625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x467 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x489 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x512 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x589 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x5AB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DC DUP3 PUSH2 0x5D7 DUP6 PUSH2 0x65B JUMP JUMPDEST PUSH2 0x6F3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x709 JUMP JUMPDEST PUSH2 0x62F DUP4 DUP3 PUSH2 0x735 JUMP JUMPDEST PUSH2 0x63A DUP4 DUP4 DUP4 PUSH2 0x757 JUMP JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xAF2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x666 DUP3 PUSH2 0x788 JUMP JUMPDEST PUSH2 0x6EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x696 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6E6 SWAP2 SWAP1 PUSH2 0xA24 JUMP JUMPDEST PUSH2 0x6ED JUMP JUMPDEST SELFBALANCE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x702 JUMPI DUP2 PUSH2 0x5DC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x72D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP2 SWAP1 PUSH2 0xA88 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x762 DUP5 PUSH2 0x788 JUMP JUMPDEST PUSH2 0x776 JUMPI PUSH2 0x771 DUP5 DUP5 DUP5 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x780 JUMP JUMPDEST PUSH2 0x780 DUP4 DUP4 PUSH2 0x7A2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x780 DUP5 DUP5 DUP5 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x7BE SWAP1 PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x800 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x80F DUP3 DUP3 PUSH2 0x862 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x780 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x833 SWAP3 SWAP2 SWAP1 PUSH2 0xA6F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x873 JUMP JUMPDEST DUP2 PUSH2 0x86F JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x87E DUP4 PUSH2 0x92D JUMP JUMPDEST PUSH2 0x89A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB60 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x8B6 SWAP2 SWAP1 PUSH2 0xA3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x907 DUP3 DUP3 PUSH2 0x862 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x924 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x924 SWAP2 SWAP1 PUSH2 0xA04 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x780 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x977 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5DC DUP2 PUSH2 0xCC2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x994 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x99F DUP2 PUSH2 0xCC2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x9AF DUP2 PUSH2 0xCC2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9CE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x9D9 DUP2 PUSH2 0xCC2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x9E9 DUP2 PUSH2 0xCC2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x9F9 DUP2 PUSH2 0xCC2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA15 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5DC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA35 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xA4E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xC92 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xAA7 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xC92 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCAD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC95 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xCBC JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 0xEB 0xE9 DUP10 EXTCODESIZE 0xD7 ORIGIN CODECOPY LOG3 0xCB 0xE9 0xE7 0xF BYTE CHAINID 0x4B 0xDF GAS PUSH10 0xDA62D4539058D08F7CBE DUP2 0xE0 DUP14 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "858:3100:11:-:0;;;;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;858:3100:11;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 280
                  },
                  {
                    "length": 32,
                    "start": 412
                  },
                  {
                    "length": 32,
                    "start": 690
                  },
                  {
                    "length": 32,
                    "start": 1065
                  },
                  {
                    "length": 32,
                    "start": 1202
                  },
                  {
                    "length": 32,
                    "start": 1355
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063cefa51221161005b578063cefa5122146100c8578063e9852569146100e8578063eeb30fea146100fb578063f83d08ba146101035761007d565b8063241686a0146100825780632d34ba79146100a05780635bc9d96d146100b5575b600080fd5b61008a61010b565b6040516100979190610a5b565b60405180910390f35b6100b36100ae366004610982565b610191565b005b6100b36100c33660046109ba565b6102a7565b6100db6100d6366004610966565b61041c565b6040516100979190610c89565b6100db6100f6366004610982565b6104a5565b61008a61053e565b6100db6105bb565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561015f5760405162461bcd60e51b815260040161015690610c52565b60405180910390fd5b6001600054146101815760405162461bcd60e51b815260040161015690610b8b565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101da5760405162461bcd60e51b815260040161015690610c52565b6001546001600160a01b0316156102035760405162461bcd60e51b815260040161015690610c22565b6001600160a01b0382161580159061022357506001600160a01b03811615155b61023f5760405162461bcd60e51b815260040161015690610b29565b806001600160a01b0316826001600160a01b031614156102715760405162461bcd60e51b815260040161015690610abb565b6102796105c1565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156102f05760405162461bcd60e51b815260040161015690610c52565b6001600054146103125760405162461bcd60e51b815260040161015690610b8b565b6002600055336001600160a01b038316148061033f5750806001600160a01b0316826001600160a01b0316145b61035b5760405162461bcd60e51b815260040161015690610beb565b6001600160a01b03808416600090815260046020908152604080832093861683529290529081205461038e9085906105c8565b9050600081116103b05760405162461bcd60e51b815260040161015690610bc2565b6001600160a01b038085166000908152600460209081526040808320938716835292905220546103e090826105e3565b6001600160a01b03808616600090815260046020908152604080832093881683529290522055610411848383610625565b505060016000555050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104675760405162461bcd60e51b815260040161015690610c52565b6001600054146104895760405162461bcd60e51b815260040161015690610b8b565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104f05760405162461bcd60e51b815260040161015690610c52565b6001600054146105125760405162461bcd60e51b815260040161015690610b8b565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156105895760405162461bcd60e51b815260040161015690610c52565b6001600054146105ab5760405162461bcd60e51b815260040161015690610b8b565b506001546001600160a01b031690565b60005481565b6001600055565b60006105dc826105d78561065b565b6106f3565b9392505050565b60006105dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610709565b61062f8382610735565b61063a838383610757565b6106565760405162461bcd60e51b815260040161015690610af2565b505050565b600061066682610788565b6106eb576040516370a0823160e01b81526001600160a01b038316906370a0823190610696903090600401610a5b565b60206040518083038186803b1580156106ae57600080fd5b505afa1580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e69190610a24565b6106ed565b475b92915050565b600081831061070257816105dc565b5090919050565b6000818484111561072d5760405162461bcd60e51b81526004016101569190610a88565b505050900390565b6001600160a01b03909116600090815260036020526040902080549091019055565b600061076284610788565b61077657610771848484610795565b610780565b61078083836107a2565b949350505050565b6001600160a01b03161590565b600061078084848461081a565b6000806060846001600160a01b0316846040516107be90610a58565b60006040518083038185875af1925050503d80600081146107fb576040519150601f19603f3d011682016040523d82523d6000602084013e610800565b606091505b509150915061080f8282610862565b506001949350505050565b6000610780848484604051602401610833929190610a6f565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610873565b8161086f57805160208201fd5b5050565b600061087e8361092d565b61089a5760405162461bcd60e51b815260040161015690610b60565b60006060846001600160a01b0316846040516108b69190610a3c565b6000604051808303816000865af19150503d80600081146108f3576040519150601f19603f3d011682016040523d82523d6000602084013e6108f8565b606091505b50915091506109078282610862565b805115806109245750808060200190518101906109249190610a04565b95945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610780575050151592915050565b600060208284031215610977578081fd5b81356105dc81610cc2565b60008060408385031215610994578081fd5b823561099f81610cc2565b915060208301356109af81610cc2565b809150509250929050565b6000806000606084860312156109ce578081fd5b83356109d981610cc2565b925060208401356109e981610cc2565b915060408401356109f981610cc2565b809150509250925092565b600060208284031215610a15578081fd5b815180151581146105dc578182fd5b600060208284031215610a35578081fd5b5051919050565b60008251610a4e818460208701610c92565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610aa7816040850160208701610c92565b601f01601f19169190910160400192915050565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b90815260200190565b60005b83811015610cad578181015183820152602001610c95565b83811115610cbc576000848401525b50505050565b6001600160a01b0381168114610cd757600080fd5b5056fea2646970667358221220a4ebe9893bd73239a3cbe9e70f1a464bdf5a69da62d4539058d08f7cbe81e08d64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCEFA5122 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x103 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x241686A0 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x10B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB3 PUSH2 0xAE CALLDATASIZE PUSH1 0x4 PUSH2 0x982 JUMP JUMPDEST PUSH2 0x191 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB3 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x9BA JUMP JUMPDEST PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0xDB PUSH2 0xD6 CALLDATASIZE PUSH1 0x4 PUSH2 0x966 JUMP JUMPDEST PUSH2 0x41C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xC89 JUMP JUMPDEST PUSH2 0xDB PUSH2 0xF6 CALLDATASIZE PUSH1 0x4 PUSH2 0x982 JUMP JUMPDEST PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x53E JUMP JUMPDEST PUSH2 0xDB PUSH2 0x5BB JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x181 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x203 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x223 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x23F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB29 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x271 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xABB JUMP JUMPDEST PUSH2 0x279 PUSH2 0x5C1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x33F JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x35B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x38E SWAP1 DUP6 SWAP1 PUSH2 0x5C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x3B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xBC2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3E0 SWAP1 DUP3 PUSH2 0x5E3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x411 DUP5 DUP4 DUP4 PUSH2 0x625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x467 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x489 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x512 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x589 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xC52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x5AB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB8B JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DC DUP3 PUSH2 0x5D7 DUP6 PUSH2 0x65B JUMP JUMPDEST PUSH2 0x6F3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x709 JUMP JUMPDEST PUSH2 0x62F DUP4 DUP3 PUSH2 0x735 JUMP JUMPDEST PUSH2 0x63A DUP4 DUP4 DUP4 PUSH2 0x757 JUMP JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xAF2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x666 DUP3 PUSH2 0x788 JUMP JUMPDEST PUSH2 0x6EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x696 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6E6 SWAP2 SWAP1 PUSH2 0xA24 JUMP JUMPDEST PUSH2 0x6ED JUMP JUMPDEST SELFBALANCE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x702 JUMPI DUP2 PUSH2 0x5DC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x72D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP2 SWAP1 PUSH2 0xA88 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x762 DUP5 PUSH2 0x788 JUMP JUMPDEST PUSH2 0x776 JUMPI PUSH2 0x771 DUP5 DUP5 DUP5 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x780 JUMP JUMPDEST PUSH2 0x780 DUP4 DUP4 PUSH2 0x7A2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x780 DUP5 DUP5 DUP5 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x7BE SWAP1 PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x800 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x80F DUP3 DUP3 PUSH2 0x862 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x780 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x833 SWAP3 SWAP2 SWAP1 PUSH2 0xA6F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x873 JUMP JUMPDEST DUP2 PUSH2 0x86F JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x87E DUP4 PUSH2 0x92D JUMP JUMPDEST PUSH2 0x89A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156 SWAP1 PUSH2 0xB60 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x8B6 SWAP2 SWAP1 PUSH2 0xA3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x907 DUP3 DUP3 PUSH2 0x862 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x924 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x924 SWAP2 SWAP1 PUSH2 0xA04 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x780 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x977 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5DC DUP2 PUSH2 0xCC2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x994 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x99F DUP2 PUSH2 0xCC2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x9AF DUP2 PUSH2 0xCC2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9CE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x9D9 DUP2 PUSH2 0xCC2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x9E9 DUP2 PUSH2 0xCC2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x9F9 DUP2 PUSH2 0xCC2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA15 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5DC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA35 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xA4E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xC92 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xAA7 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xC92 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCAD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC95 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xCBC JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 0xEB 0xE9 DUP10 EXTCODESIZE 0xD7 ORIGIN CODECOPY LOG3 0xCB 0xE9 0xE7 0xF BYTE CHAINID 0x4B 0xDF GAS PUSH10 0xDA62D4539058D08F7CBE DUP2 0xE0 DUP14 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "858:3100:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:168:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:447;;;;;;:::i;:::-;;:::i;:::-;;3046:910:11;;;;;;:::i;:::-;;:::i;1238:218::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2026:236::-;;;;;;:::i;:::-;;:::i;1874:172:12:-;;;:::i;356:19:17:-;;;:::i;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1322:447::-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;3046:910:11:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;3373:10:11::2;-1:-1:-1::0;;;;;3373:19:11;::::2;;::::0;:41:::2;;;3405:9;-1:-1:-1::0;;;;;3396:18:11::2;:5;-1:-1:-1::0;;;;;3396:18:11::2;;3373:41;3352:112;;;;-1:-1:-1::0;;;3352:112:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3565:23:11;;::::2;3475:14;3565:23:::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;;;3504:105:::2;::::0;3540:7;;3504:18:::2;:105::i;:::-;3475:134;;3670:1;3661:6;:10;3653:38;;;;-1:-1:-1::0;;;3653:38:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3827:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;:42:::2;::::0;3862:6;3827:34:::2;:42::i;:::-;-1:-1:-1::0;;;;;3772:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:52;;::::2;::::0;;;;;;:97;3908:41:::2;3787:7:::0;3931:9;3942:6;3908:13:::2;:41::i;:::-;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;3046:910:11:o;1238:218::-;1394:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1424:25:11::2;;::::0;;;:16:::2;:25;::::0;;;;;;1238:218::o;2026:236::-;2195:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2225:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;;::::2;::::0;;;;;;;;;2026:236::o;1874:172:12:-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;356:19:17:-;;;;:::o;382:54::-;307:1;418:4;:11;382:54::o;2268:455:11:-;2379:7;2664:52;2673:9;2684:31;2707:7;2684:22;:31::i;:::-;2664:8;:52::i;:::-;2657:59;2268:455;-1:-1:-1;;;2268:455:11:o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;2729:311:11:-;2861:33;2878:7;2887:6;2861:16;:33::i;:::-;2925:57;2955:7;2964:9;2975:6;2925:29;:57::i;:::-;2904:129;;;;-1:-1:-1;;;2904:129:11;;;;;;;:::i;:::-;2729:311;;;:::o;763:223:32:-;826:7;864:16;872:7;864;:16::i;:::-;:115;;939:40;;-1:-1:-1;;;939:40:32;;-1:-1:-1;;;;;939:25:32;;;;;:40;;973:4;;939:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;864:115;;;899:21;864:115;845:134;763:223;-1:-1:-1;;763:223:32:o;391:104:4:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:4;;391:104;-1:-1:-1;391:104:4:o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:5;;;1746:187::o;1112:120:11:-;-1:-1:-1;;;;;1190:25:11;;;;;;;:16;:25;;;;;:35;;;;;;;1112:120::o;2263:307:32:-;2401:4;2436:16;2444:7;2436;:16::i;:::-;:127;;2522:41;2536:7;2545:9;2556:6;2522:13;:41::i;:::-;2436:127;;;2471:32;2485:9;2496:6;2471:13;:32::i;:::-;2417:146;2263:307;-1:-1:-1;;;;2263:307:32:o;646:111::-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1291:198::-;1414:4;1437:45;1455:7;1464:9;1475:6;1437:17;:45::i;992:293::-;1092:4;1113:12;1127:23;1166:9;-1:-1:-1;;;;;1166:14:32;1188:6;1166:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:87;;;;1209:48;1237:7;1246:10;1209:27;:48::i;:::-;-1:-1:-1;1274:4:32;;992:293;-1:-1:-1;;;;992:293:32:o;1648:374:34:-;1766:4;1801:214;1827:7;1946:9;1977:6;1852:149;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1852:149:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1852:149:34;-1:-1:-1;;;1852:149:34;;;1801:8;:214::i;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;:::-;750:63;439:381;-1:-1:-1;;;;;439:381:34:o;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;571:241:-1:-;;675:2;663:9;654:7;650:23;646:32;643:2;;;-1:-1;;681:12;643:2;85:6;72:20;97:33;124:5;97:33;:::i;819:366::-;;;940:2;928:9;919:7;915:23;911:32;908:2;;;-1:-1;;946:12;908:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;998:63;-1:-1;1098:2;1137:22;;72:20;97:33;72:20;97:33;:::i;:::-;1106:63;;;;902:283;;;;;:::o;1192:507::-;;;;1338:2;1326:9;1317:7;1313:23;1309:32;1306:2;;;-1:-1;;1344:12;1306:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1396:63;-1:-1;1496:2;1535:22;;72:20;97:33;72:20;97:33;:::i;:::-;1504:63;-1:-1;1604:2;1651:22;;217:20;242:41;217:20;242:41;:::i;:::-;1612:71;;;;1300:399;;;;;:::o;1706:257::-;;1818:2;1806:9;1797:7;1793:23;1789:32;1786:2;;;-1:-1;;1824:12;1786:2;376:6;370:13;13900:5;12940:13;12933:21;13878:5;13875:32;13865:2;;-1:-1;;13911:12;1970:263;;2085:2;2073:9;2064:7;2060:23;2056:32;2053:2;;;-1:-1;;2091:12;2053:2;-1:-1;508:13;;2047:186;-1:-1;2047:186::o;6502:271::-;;2520:5;12175:12;2631:52;2676:6;2671:3;2664:4;2657:5;2653:16;2631:52;:::i;:::-;2695:16;;;;;6636:137;-1:-1;;6636:137::o;6780:379::-;7144:10;6968:191::o;7166:222::-;-1:-1;;;;;13028:54;;;;2311:37;;7293:2;7278:18;;7264:124::o;7395:333::-;-1:-1;;;;;13028:54;;;;2311:37;;7714:2;7699:18;;6453:37;7550:2;7535:18;;7521:207::o;7735:310::-;;7882:2;7903:17;7896:47;2868:5;12175:12;12614:6;7882:2;7871:9;7867:18;12602:19;2962:52;3007:6;12642:14;7871:9;12642:14;7882:2;2988:5;2984:16;2962:52;:::i;:::-;13534:7;13518:14;-1:-1;;13514:28;3026:39;;;;12642:14;3026:39;;7853:192;-1:-1;;7853:192::o;8052:416::-;8252:2;8266:47;;;3302:2;8237:18;;;12602:19;3338:33;12642:14;;;3318:54;3391:12;;;8223:245::o;8475:416::-;8675:2;8689:47;;;3642:2;8660:18;;;12602:19;3678:27;12642:14;;;3658:48;3725:12;;;8646:245::o;8898:416::-;9098:2;9112:47;;;3976:2;9083:18;;;12602:19;4012:30;12642:14;;;3992:51;4062:12;;;9069:245::o;9321:416::-;9521:2;9535:47;;;4313:2;9506:18;;;12602:19;-1:-1;;;12642:14;;;4329:40;4388:12;;;9492:245::o;9744:416::-;9944:2;9958:47;;;4639:2;9929:18;;;12602:19;4675:33;12642:14;;;4655:54;4728:12;;;9915:245::o;10167:416::-;10367:2;10381:47;;;4979:2;10352:18;;;12602:19;-1:-1;;;12642:14;;;4995:38;5052:12;;;10338:245::o;10590:416::-;10790:2;10804:47;;;5303:2;10775:18;;;12602:19;5339:26;12642:14;;;5319:47;5385:12;;;10761:245::o;11013:416::-;11213:2;11227:47;;;5941:2;11198:18;;;12602:19;-1:-1;;;12642:14;;;5957:45;6021:12;;;11184:245::o;11436:416::-;11636:2;11650:47;;;6272:2;11621:18;;;12602:19;6308:28;12642:14;;;6288:49;6356:12;;;11607:245::o;11859:222::-;6453:37;;;11986:2;11971:18;;11957:124::o;13174:268::-;13239:1;13246:101;13260:6;13257:1;13254:13;13246:101;;;13327:11;;;13321:18;13308:11;;;13301:39;13282:2;13275:10;13246:101;;;13362:6;13359:1;13356:13;13353:2;;;13239:1;13418:6;13413:3;13409:16;13402:27;13353:2;;13223:219;;;:::o;13555:117::-;-1:-1;;;;;13028:54;;13614:35;;13604:2;;13663:1;;13653:12;13604:2;13598:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "668800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "exit(address,address,address)": "infinite",
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "getExitableAmount(address,address)": "infinite",
                "getTotalTransferred(address)": "infinite",
                "lock()": "1094",
                "setup(address,address)": "infinite"
              },
              "internal": {
                "getAvailableAmount(address,uint256)": "infinite",
                "makeBalanceExitable(address,struct Balance memory)": "infinite",
                "makeExitable(address,address,uint256)": "infinite",
                "registerTransfer(address,uint256)": "20923",
                "transferAsset(address,address payable,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalTransferred(address)": "cefa5122",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}}},\"title\":\"CMCAsset\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"Contains logic to safely transfer channel assets (even if they are         noncompliant). During adjudication, balances from defunding the         channel or defunding transfers are registered as withdrawable. Once         they are registered, the owner (or a watchtower on behalf of the         owner), may call `exit` to reclaim funds from the multisig.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/CMCAsset.sol\":\"CMCAsset\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/CMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCAsset.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/Math.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title CMCAsset\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic to safely transfer channel assets (even if they are\\n///         noncompliant). During adjudication, balances from defunding the\\n///         channel or defunding transfers are registered as withdrawable. Once\\n///         they are registered, the owner (or a watchtower on behalf of the\\n///         owner), may call `exit` to reclaim funds from the multisig.\\n\\ncontract CMCAsset is CMCCore, ICMCAsset {\\n    using SafeMath for uint256;\\n    using LibMath for uint256;\\n\\n    mapping(address => uint256) internal totalTransferred;\\n    mapping(address => mapping(address => uint256))\\n        private exitableAmount;\\n\\n    function registerTransfer(address assetId, uint256 amount) internal {\\n        totalTransferred[assetId] += amount;\\n    }\\n\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return totalTransferred[assetId];\\n    }\\n\\n    function makeExitable(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal {\\n        exitableAmount[assetId][\\n            recipient\\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\\n    }\\n\\n    function makeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) internal {\\n        for (uint256 i = 0; i < 2; i++) {\\n            uint256 amount = balance.amount[i];\\n            if (amount > 0) {\\n                makeExitable(assetId, balance.to[i], amount);\\n            }\\n        }\\n    }\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return exitableAmount[assetId][owner];\\n    }\\n\\n    function getAvailableAmount(address assetId, uint256 maxAmount)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        // Taking the min protects against the case where the multisig\\n        // holds less than the amount that is trying to be withdrawn\\n        // while still allowing the total of the funds to be removed\\n        // without the transaction reverting.\\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\\n    }\\n\\n    function transferAsset(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal {\\n        registerTransfer(assetId, amount);\\n        require(\\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\\n            \\\"CMCAsset: TRANSFER_FAILED\\\"\\n        );\\n    }\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external override onlyViaProxy nonReentrant {\\n        // Either the owner must be the recipient, or in control\\n        // of setting the recipient of the funds to whomever they\\n        // choose\\n        require(\\n            msg.sender == owner || owner == recipient,\\n            \\\"CMCAsset: OWNER_MISMATCH\\\"\\n        );\\n\\n        uint256 amount =\\n            getAvailableAmount(\\n                assetId,\\n                exitableAmount[assetId][owner]\\n            );\\n\\n        // Revert if amount is 0\\n        require(amount > 0, \\\"CMCAsset: NO_OP\\\");\\n\\n        // Reduce the amount claimable from the multisig by the owner\\n        exitableAmount[assetId][\\n            owner\\n        ] = exitableAmount[assetId][owner].sub(amount);\\n\\n        // Perform transfer\\n        transferAsset(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x39c1bd81d8ec2a0fa7c23aad683017f5e2ec28a2db43643020649f935b5b74bf\",\"license\":\"UNLICENSED\"},\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/CMCAsset.sol:CMCAsset",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/CMCAsset.sol:CMCAsset",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/CMCAsset.sol:CMCAsset",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              },
              {
                "astId": 2348,
                "contract": "src.sol/CMCAsset.sol:CMCAsset",
                "label": "totalTransferred",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2354,
                "contract": "src.sol/CMCAsset.sol:CMCAsset",
                "label": "exitableAmount",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "Contains logic to safely transfer channel assets (even if they are         noncompliant). During adjudication, balances from defunding the         channel or defunding transfers are registered as withdrawable. Once         they are registered, the owner (or a watchtower on behalf of the         owner), may call `exit` to reclaim funds from the multisig.",
            "version": 1
          }
        }
      },
      "src.sol/CMCCore.sol": {
        "CMCCore": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              }
            },
            "title": "CMCCore",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b60805261047761003a6000398060ae5280610132528061024a52506104776000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063241686a0146100515780632d34ba791461006f578063eeb30fea14610084578063f83d08ba1461008c575b600080fd5b6100596100a1565b6040516100669190610318565b60405180910390f35b61008261007d3660046102e4565b610127565b005b61005961023d565b6100946102ba565b6040516100669190610438565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156100f55760405162461bcd60e51b81526004016100ec90610401565b60405180910390fd5b6001600054146101175760405162461bcd60e51b81526004016100ec9061039a565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101705760405162461bcd60e51b81526004016100ec90610401565b6001546001600160a01b0316156101995760405162461bcd60e51b81526004016100ec906103d1565b6001600160a01b038216158015906101b957506001600160a01b03811615155b6101d55760405162461bcd60e51b81526004016100ec90610363565b806001600160a01b0316826001600160a01b031614156102075760405162461bcd60e51b81526004016100ec9061032c565b61020f6102c0565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156102885760405162461bcd60e51b81526004016100ec90610401565b6001600054146102aa5760405162461bcd60e51b81526004016100ec9061039a565b506001546001600160a01b031690565b60005481565b6001600055565b80356001600160a01b03811681146102de57600080fd5b92915050565b600080604083850312156102f6578182fd5b61030084846102c7565b915061030f84602085016102c7565b90509250929050565b6001600160a01b0391909116815260200190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b9081526020019056fea2646970667358221220968a264d2099ec536d92afff8be8c69a2df7280d507df7a08fab45517675809c64736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0x477 PUSH2 0x3A PUSH1 0x0 CODECOPY DUP1 PUSH1 0xAE MSTORE DUP1 PUSH2 0x132 MSTORE DUP1 PUSH2 0x24A MSTORE POP PUSH2 0x477 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x241686A0 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x8C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x318 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x2E4 JUMP JUMPDEST PUSH2 0x127 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x59 PUSH2 0x23D JUMP JUMPDEST PUSH2 0x94 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x438 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x401 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x117 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x39A JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x170 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x199 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x3D1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1B9 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x1D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x363 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x207 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x32C JUMP JUMPDEST PUSH2 0x20F PUSH2 0x2C0 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x288 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x2AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x39A JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2F6 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x300 DUP5 DUP5 PUSH2 0x2C7 JUMP JUMPDEST SWAP2 POP PUSH2 0x30F DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x2C7 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 DUP11 0x26 0x4D KECCAK256 SWAP10 0xEC MSTORE8 PUSH14 0x92AFFF8BE8C69A2DF7280D507DF7 LOG0 DUP16 0xAB GASLIMIT MLOAD PUSH23 0x75809C64736F6C63430007010033000000000000000000 ",
              "sourceMap": "399:1924:12:-:0;;;815:64;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;399:1924;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 174
                  },
                  {
                    "length": 32,
                    "start": 306
                  },
                  {
                    "length": 32,
                    "start": 586
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c8063241686a0146100515780632d34ba791461006f578063eeb30fea14610084578063f83d08ba1461008c575b600080fd5b6100596100a1565b6040516100669190610318565b60405180910390f35b61008261007d3660046102e4565b610127565b005b61005961023d565b6100946102ba565b6040516100669190610438565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156100f55760405162461bcd60e51b81526004016100ec90610401565b60405180910390fd5b6001600054146101175760405162461bcd60e51b81526004016100ec9061039a565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101705760405162461bcd60e51b81526004016100ec90610401565b6001546001600160a01b0316156101995760405162461bcd60e51b81526004016100ec906103d1565b6001600160a01b038216158015906101b957506001600160a01b03811615155b6101d55760405162461bcd60e51b81526004016100ec90610363565b806001600160a01b0316826001600160a01b031614156102075760405162461bcd60e51b81526004016100ec9061032c565b61020f6102c0565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156102885760405162461bcd60e51b81526004016100ec90610401565b6001600054146102aa5760405162461bcd60e51b81526004016100ec9061039a565b506001546001600160a01b031690565b60005481565b6001600055565b80356001600160a01b03811681146102de57600080fd5b92915050565b600080604083850312156102f6578182fd5b61030084846102c7565b915061030f84602085016102c7565b90509250929050565b6001600160a01b0391909116815260200190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b9081526020019056fea2646970667358221220968a264d2099ec536d92afff8be8c69a2df7280d507df7a08fab45517675809c64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x241686A0 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x8C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x318 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x2E4 JUMP JUMPDEST PUSH2 0x127 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x59 PUSH2 0x23D JUMP JUMPDEST PUSH2 0x94 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x438 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x401 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x117 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x39A JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x170 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x199 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x3D1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1B9 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x1D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x363 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x207 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x32C JUMP JUMPDEST PUSH2 0x20F PUSH2 0x2C0 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x288 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x2AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC SWAP1 PUSH2 0x39A JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2F6 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x300 DUP5 DUP5 PUSH2 0x2C7 JUMP JUMPDEST SWAP2 POP PUSH2 0x30F DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x2C7 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 DUP11 0x26 0x4D KECCAK256 SWAP10 0xEC MSTORE8 PUSH14 0x92AFFF8BE8C69A2DF7280D507DF7 LOG0 DUP16 0xAB GASLIMIT MLOAD PUSH23 0x75809C64736F6C63430007010033000000000000000000 ",
              "sourceMap": "399:1924:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:168;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:447;;;;;;:::i;:::-;;:::i;:::-;;1874:172;;;:::i;356:19:17:-;;;:::i;:::-;;;;;;;:::i;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1322:447::-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;1874:172::-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;356:19:17:-;;;;:::o;382:54::-;307:1;418:4;:11;382:54::o;5:130:-1:-;72:20;;-1:-1;;;;;5343:54;;5547:35;;5537:2;;5596:1;;5586:12;5537:2;57:78;;;;:::o;142:366::-;;;263:2;251:9;242:7;238:23;234:32;231:2;;;-1:-1;;269:12;231:2;331:53;376:7;352:22;331:53;:::i;:::-;321:63;;439:53;484:7;421:2;464:9;460:22;439:53;:::i;:::-;429:63;;225:283;;;;;:::o;2438:222::-;-1:-1;;;;;5343:54;;;;586:37;;2565:2;2550:18;;2536:124::o;2667:416::-;2867:2;2881:47;;;860:2;2852:18;;;5115:19;896:33;5155:14;;;876:54;949:12;;;2838:245::o;3090:416::-;3290:2;3304:47;;;1200:2;3275:18;;;5115:19;1236:30;5155:14;;;1216:51;1286:12;;;3261:245::o;3513:416::-;3713:2;3727:47;;;1537:2;3698:18;;;5115:19;1573:33;5155:14;;;1553:54;1626:12;;;3684:245::o;3936:416::-;4136:2;4150:47;;;1877:2;4121:18;;;5115:19;-1:-1;;;5155:14;;;1893:45;1957:12;;;4107:245::o;4359:416::-;4559:2;4573:47;;;2208:2;4544:18;;;5115:19;2244:28;5155:14;;;2224:49;2292:12;;;4530:245::o;4782:222::-;2389:37;;;4909:2;4894:18;;4880:124::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "228600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "lock()": "1072",
                "setup(address,address)": "infinite"
              }
            },
            "methodIdentifiers": {
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}}},\"title\":\"CMCCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Set invalid participants to block the mastercopy from being used directly         Nonzero address also prevents the mastercopy from being setup         Only setting alice is sufficient, setting bob too wouldn't change anything\"},\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"Contains logic pertaining to the participants of a channel,         including setting and retrieving the participants and the         mastercopy.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/CMCCore.sol\":\"CMCCore\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/CMCCore.sol:CMCCore",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/CMCCore.sol:CMCCore",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/CMCCore.sol:CMCCore",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "constructor": {
                "notice": "Set invalid participants to block the mastercopy from being used directly         Nonzero address also prevents the mastercopy from being setup         Only setting alice is sufficient, setting bob too wouldn't change anything"
              },
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "Contains logic pertaining to the participants of a channel,         including setting and retrieving the participants and the         mastercopy.",
            "version": 1
          }
        }
      },
      "src.sol/CMCDeposit.sol": {
        "CMCDeposit": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              }
            },
            "title": "CMCDeposit",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b60805261122961005d6000398060a5528061025e52806102d952806103ef528061056452806106af528061072b52806107a1528061082a52806108c352506112296000f3fe6080604052600436106100955760003560e01c8063b081e9c811610059578063b081e9c8146101c7578063cefa5122146101e7578063e985256914610207578063eeb30fea14610227578063f83d08ba1461023c57610115565b8063241686a01461011a5780632d34ba79146101455780635bc9d96d14610167578063635ae901146101875780636f33389e1461019a57610115565b3661011557306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156100ec5760405162461bcd60e51b81526004016100e39061116b565b60405180910390fd5b60016000541461010e5760405162461bcd60e51b81526004016100e3906110a4565b6001600055005b600080fd5b34801561012657600080fd5b5061012f610251565b60405161013c9190610e97565b60405180910390f35b34801561015157600080fd5b50610165610160366004610d93565b6102ce565b005b34801561017357600080fd5b50610165610182366004610dcb565b6103e4565b610165610195366004610e15565b610559565b3480156101a657600080fd5b506101ba6101b5366004610d77565b6106a2565b60405161013c91906111a2565b3480156101d357600080fd5b506101ba6101e2366004610d77565b61071e565b3480156101f357600080fd5b506101ba610202366004610d77565b610794565b34801561021357600080fd5b506101ba610222366004610d93565b61081d565b34801561023357600080fd5b5061012f6108b6565b34801561024857600080fd5b506101ba610933565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561029c5760405162461bcd60e51b81526004016100e39061116b565b6001600054146102be5760405162461bcd60e51b81526004016100e3906110a4565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156103175760405162461bcd60e51b81526004016100e39061116b565b6001546001600160a01b0316156103405760405162461bcd60e51b81526004016100e39061113b565b6001600160a01b0382161580159061036057506001600160a01b03811615155b61037c5760405162461bcd60e51b81526004016100e390610f89565b806001600160a01b0316826001600160a01b031614156103ae5760405162461bcd60e51b81526004016100e390610f1b565b6103b6610939565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561042d5760405162461bcd60e51b81526004016100e39061116b565b60016000541461044f5760405162461bcd60e51b81526004016100e3906110a4565b6002600055336001600160a01b038316148061047c5750806001600160a01b0316826001600160a01b0316145b6104985760405162461bcd60e51b81526004016100e390611104565b6001600160a01b0380841660009081526004602090815260408083209386168352929052908120546104cb908590610940565b9050600081116104ed5760405162461bcd60e51b81526004016100e3906110db565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205461051d908261095b565b6001600160a01b0380861660009081526004602090815260408083209388168352929052205561054e84838361099d565b505060016000555050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156105a25760405162461bcd60e51b81526004016100e39061116b565b6001600054146105c45760405162461bcd60e51b81526004016100e3906110a4565b60026000556105d2826109d3565b156105fb578034146105f65760405162461bcd60e51b81526004016100e390611001565b610641565b34156106195760405162461bcd60e51b81526004016100e390611038565b610625823330846109e0565b6106415760405162461bcd60e51b81526004016100e390610fc0565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906106919084908490610ecf565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106ed5760405162461bcd60e51b81526004016100e39061116b565b60016000541461070f5760405162461bcd60e51b81526004016100e3906110a4565b61071882610a33565b92915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107695760405162461bcd60e51b81526004016100e39061116b565b60016000541461078b5760405162461bcd60e51b81526004016100e3906110a4565b61071882610a4e565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107df5760405162461bcd60e51b81526004016100e39061116b565b6001600054146108015760405162461bcd60e51b81526004016100e3906110a4565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108685760405162461bcd60e51b81526004016100e39061116b565b60016000541461088a5760405162461bcd60e51b81526004016100e3906110a4565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109015760405162461bcd60e51b81526004016100e39061116b565b6001600054146109235760405162461bcd60e51b81526004016100e3906110a4565b506001546001600160a01b031690565b60005481565b6001600055565b60006109548261094f85610a83565b610b1a565b9392505050565b600061095483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b30565b6109a78382610b5c565b6109b2838383610b7e565b6109ce5760405162461bcd60e51b81526004016100e390610f52565b505050565b6001600160a01b03161590565b6000610a2a858585856040516024016109fb93929190610eab565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610baf565b95945050505050565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b0381166000908152600560209081526040808320546003909252822054610a7b84610a83565b010392915050565b6000610a8e826109d3565b610b13576040516370a0823160e01b81526001600160a01b038316906370a0823190610abe903090600401610e97565b60206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190610e60565b610718565b5047919050565b6000818310610b295781610954565b5090919050565b60008184841115610b545760405162461bcd60e51b81526004016100e39190610ee8565b505050900390565b6001600160a01b03909116600090815260036020526040902080549091019055565b6000610b89846109d3565b610b9d57610b98848484610c60565b610ba7565b610ba78383610c6d565b949350505050565b6000610bba83610ce5565b610bd65760405162461bcd60e51b81526004016100e390611079565b60006060846001600160a01b031684604051610bf29190610e78565b6000604051808303816000865af19150503d8060008114610c2f576040519150601f19603f3d011682016040523d82523d6000602084013e610c34565b606091505b5091509150610c438282610d1e565b80511580610a2a575080806020019051810190610a2a9190610e40565b6000610ba7848484610d2f565b6000806060846001600160a01b031684604051610c8990610e94565b60006040518083038185875af1925050503d8060008114610cc6576040519150601f19603f3d011682016040523d82523d6000602084013e610ccb565b606091505b5091509150610cda8282610d1e565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610ba7575050151592915050565b81610d2b57805160208201fd5b5050565b6000610ba7848484604051602401610d48929190610ecf565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610baf565b600060208284031215610d88578081fd5b8135610954816111db565b60008060408385031215610da5578081fd5b8235610db0816111db565b91506020830135610dc0816111db565b809150509250929050565b600080600060608486031215610ddf578081fd5b8335610dea816111db565b92506020840135610dfa816111db565b91506040840135610e0a816111db565b809150509250925092565b60008060408385031215610e27578182fd5b8235610e32816111db565b946020939093013593505050565b600060208284031215610e51578081fd5b81518015158114610954578182fd5b600060208284031215610e71578081fd5b5051919050565b60008251610e8a8184602087016111ab565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610f078160408501602087016111ab565b601f01601f19169190910160400192915050565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b90815260200190565b60005b838110156111c65781810151838201526020016111ae565b838111156111d5576000848401525b50505050565b6001600160a01b03811681146111f057600080fd5b5056fea2646970667358221220c866cb36a443e13a253b872b8a11e2d3b3c1af25170de49dcbf88148f43d86a164736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0x1229 PUSH2 0x5D PUSH1 0x0 CODECOPY DUP1 PUSH1 0xA5 MSTORE DUP1 PUSH2 0x25E MSTORE DUP1 PUSH2 0x2D9 MSTORE DUP1 PUSH2 0x3EF MSTORE DUP1 PUSH2 0x564 MSTORE DUP1 PUSH2 0x6AF MSTORE DUP1 PUSH2 0x72B MSTORE DUP1 PUSH2 0x7A1 MSTORE DUP1 PUSH2 0x82A MSTORE DUP1 PUSH2 0x8C3 MSTORE POP PUSH2 0x1229 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x95 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB081E9C8 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x23C JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x241686A0 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x145 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x6F33389E EQ PUSH2 0x19A JUMPI PUSH2 0x115 JUMP JUMPDEST CALLDATASIZE PUSH2 0x115 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x10E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F PUSH2 0x251 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13C SWAP2 SWAP1 PUSH2 0xE97 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x165 PUSH2 0x160 CALLDATASIZE PUSH1 0x4 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x2CE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x165 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0xDCB JUMP JUMPDEST PUSH2 0x3E4 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x195 CALLDATASIZE PUSH1 0x4 PUSH2 0xE15 JUMP JUMPDEST PUSH2 0x559 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x6A2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13C SWAP2 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x71E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x202 CALLDATASIZE PUSH1 0x4 PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x794 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x222 CALLDATASIZE PUSH1 0x4 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x81D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F PUSH2 0x8B6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x933 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x29C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x2BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x340 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x360 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x37C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xF89 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xF1B JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x939 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x42D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x44F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x47C JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x498 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1104 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x4CB SWAP1 DUP6 SWAP1 PUSH2 0x940 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x4ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x51D SWAP1 DUP3 PUSH2 0x95B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x54E DUP5 DUP4 DUP4 PUSH2 0x99D JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x5A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x5C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x5D2 DUP3 PUSH2 0x9D3 JUMP JUMPDEST ISZERO PUSH2 0x5FB JUMPI DUP1 CALLVALUE EQ PUSH2 0x5F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1001 JUMP JUMPDEST PUSH2 0x641 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x619 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1038 JUMP JUMPDEST PUSH2 0x625 DUP3 CALLER ADDRESS DUP5 PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xFC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x691 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x6ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x70F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH2 0x718 DUP3 PUSH2 0xA33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x769 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x78B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH2 0x718 DUP3 PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x7DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x801 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x868 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x88A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x901 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x923 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x954 DUP3 PUSH2 0x94F DUP6 PUSH2 0xA83 JUMP JUMPDEST PUSH2 0xB1A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x954 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xB30 JUMP JUMPDEST PUSH2 0x9A7 DUP4 DUP3 PUSH2 0xB5C JUMP JUMPDEST PUSH2 0x9B2 DUP4 DUP4 DUP4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x9CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xF52 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2A DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x9FB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xEAB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xBAF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0xA7B DUP5 PUSH2 0xA83 JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA8E DUP3 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0xB13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xABE SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0xE97 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAEA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0E SWAP2 SWAP1 PUSH2 0xE60 JUMP JUMPDEST PUSH2 0x718 JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0xB29 JUMPI DUP2 PUSH2 0x954 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xB54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0xEE8 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB89 DUP5 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0xB9D JUMPI PUSH2 0xB98 DUP5 DUP5 DUP5 PUSH2 0xC60 JUMP JUMPDEST PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0xBA7 DUP4 DUP4 PUSH2 0xC6D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA DUP4 PUSH2 0xCE5 JUMP JUMPDEST PUSH2 0xBD6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1079 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xBF2 SWAP2 SWAP1 PUSH2 0xE78 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC2F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC34 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xC43 DUP3 DUP3 PUSH2 0xD1E JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0xA2A JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xA2A SWAP2 SWAP1 PUSH2 0xE40 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA7 DUP5 DUP5 DUP5 PUSH2 0xD2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xC89 SWAP1 PUSH2 0xE94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCC6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCCB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xCDA DUP3 DUP3 PUSH2 0xD1E JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0xBA7 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0xD2B JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA7 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD48 SWAP3 SWAP2 SWAP1 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD88 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x11DB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDA5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xDB0 DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xDC0 DUP2 PUSH2 0x11DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xDDF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xDEA DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xDFA DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xE0A DUP2 PUSH2 0x11DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE27 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xE32 DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE51 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x954 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE71 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xE8A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x11AB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xF07 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x11AB JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11C6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11AE JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x11F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 PUSH7 0xCB36A443E13A25 EXTCODESIZE DUP8 0x2B DUP11 GT 0xE2 0xD3 0xB3 0xC1 0xAF 0x25 OR 0xD 0xE4 SWAP14 0xCB 0xF8 DUP2 0x48 DELEGATECALL RETURNDATASIZE DUP7 LOG1 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "612:1990:13:-:0;;;;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;612:1990:13;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 165
                  },
                  {
                    "length": 32,
                    "start": 606
                  },
                  {
                    "length": 32,
                    "start": 729
                  },
                  {
                    "length": 32,
                    "start": 1007
                  },
                  {
                    "length": 32,
                    "start": 1380
                  },
                  {
                    "length": 32,
                    "start": 1711
                  },
                  {
                    "length": 32,
                    "start": 1835
                  },
                  {
                    "length": 32,
                    "start": 1953
                  },
                  {
                    "length": 32,
                    "start": 2090
                  },
                  {
                    "length": 32,
                    "start": 2243
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106100955760003560e01c8063b081e9c811610059578063b081e9c8146101c7578063cefa5122146101e7578063e985256914610207578063eeb30fea14610227578063f83d08ba1461023c57610115565b8063241686a01461011a5780632d34ba79146101455780635bc9d96d14610167578063635ae901146101875780636f33389e1461019a57610115565b3661011557306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156100ec5760405162461bcd60e51b81526004016100e39061116b565b60405180910390fd5b60016000541461010e5760405162461bcd60e51b81526004016100e3906110a4565b6001600055005b600080fd5b34801561012657600080fd5b5061012f610251565b60405161013c9190610e97565b60405180910390f35b34801561015157600080fd5b50610165610160366004610d93565b6102ce565b005b34801561017357600080fd5b50610165610182366004610dcb565b6103e4565b610165610195366004610e15565b610559565b3480156101a657600080fd5b506101ba6101b5366004610d77565b6106a2565b60405161013c91906111a2565b3480156101d357600080fd5b506101ba6101e2366004610d77565b61071e565b3480156101f357600080fd5b506101ba610202366004610d77565b610794565b34801561021357600080fd5b506101ba610222366004610d93565b61081d565b34801561023357600080fd5b5061012f6108b6565b34801561024857600080fd5b506101ba610933565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561029c5760405162461bcd60e51b81526004016100e39061116b565b6001600054146102be5760405162461bcd60e51b81526004016100e3906110a4565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156103175760405162461bcd60e51b81526004016100e39061116b565b6001546001600160a01b0316156103405760405162461bcd60e51b81526004016100e39061113b565b6001600160a01b0382161580159061036057506001600160a01b03811615155b61037c5760405162461bcd60e51b81526004016100e390610f89565b806001600160a01b0316826001600160a01b031614156103ae5760405162461bcd60e51b81526004016100e390610f1b565b6103b6610939565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561042d5760405162461bcd60e51b81526004016100e39061116b565b60016000541461044f5760405162461bcd60e51b81526004016100e3906110a4565b6002600055336001600160a01b038316148061047c5750806001600160a01b0316826001600160a01b0316145b6104985760405162461bcd60e51b81526004016100e390611104565b6001600160a01b0380841660009081526004602090815260408083209386168352929052908120546104cb908590610940565b9050600081116104ed5760405162461bcd60e51b81526004016100e3906110db565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205461051d908261095b565b6001600160a01b0380861660009081526004602090815260408083209388168352929052205561054e84838361099d565b505060016000555050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156105a25760405162461bcd60e51b81526004016100e39061116b565b6001600054146105c45760405162461bcd60e51b81526004016100e3906110a4565b60026000556105d2826109d3565b156105fb578034146105f65760405162461bcd60e51b81526004016100e390611001565b610641565b34156106195760405162461bcd60e51b81526004016100e390611038565b610625823330846109e0565b6106415760405162461bcd60e51b81526004016100e390610fc0565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906106919084908490610ecf565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106ed5760405162461bcd60e51b81526004016100e39061116b565b60016000541461070f5760405162461bcd60e51b81526004016100e3906110a4565b61071882610a33565b92915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107695760405162461bcd60e51b81526004016100e39061116b565b60016000541461078b5760405162461bcd60e51b81526004016100e3906110a4565b61071882610a4e565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107df5760405162461bcd60e51b81526004016100e39061116b565b6001600054146108015760405162461bcd60e51b81526004016100e3906110a4565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108685760405162461bcd60e51b81526004016100e39061116b565b60016000541461088a5760405162461bcd60e51b81526004016100e3906110a4565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109015760405162461bcd60e51b81526004016100e39061116b565b6001600054146109235760405162461bcd60e51b81526004016100e3906110a4565b506001546001600160a01b031690565b60005481565b6001600055565b60006109548261094f85610a83565b610b1a565b9392505050565b600061095483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b30565b6109a78382610b5c565b6109b2838383610b7e565b6109ce5760405162461bcd60e51b81526004016100e390610f52565b505050565b6001600160a01b03161590565b6000610a2a858585856040516024016109fb93929190610eab565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610baf565b95945050505050565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b0381166000908152600560209081526040808320546003909252822054610a7b84610a83565b010392915050565b6000610a8e826109d3565b610b13576040516370a0823160e01b81526001600160a01b038316906370a0823190610abe903090600401610e97565b60206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190610e60565b610718565b5047919050565b6000818310610b295781610954565b5090919050565b60008184841115610b545760405162461bcd60e51b81526004016100e39190610ee8565b505050900390565b6001600160a01b03909116600090815260036020526040902080549091019055565b6000610b89846109d3565b610b9d57610b98848484610c60565b610ba7565b610ba78383610c6d565b949350505050565b6000610bba83610ce5565b610bd65760405162461bcd60e51b81526004016100e390611079565b60006060846001600160a01b031684604051610bf29190610e78565b6000604051808303816000865af19150503d8060008114610c2f576040519150601f19603f3d011682016040523d82523d6000602084013e610c34565b606091505b5091509150610c438282610d1e565b80511580610a2a575080806020019051810190610a2a9190610e40565b6000610ba7848484610d2f565b6000806060846001600160a01b031684604051610c8990610e94565b60006040518083038185875af1925050503d8060008114610cc6576040519150601f19603f3d011682016040523d82523d6000602084013e610ccb565b606091505b5091509150610cda8282610d1e565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610ba7575050151592915050565b81610d2b57805160208201fd5b5050565b6000610ba7848484604051602401610d48929190610ecf565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610baf565b600060208284031215610d88578081fd5b8135610954816111db565b60008060408385031215610da5578081fd5b8235610db0816111db565b91506020830135610dc0816111db565b809150509250929050565b600080600060608486031215610ddf578081fd5b8335610dea816111db565b92506020840135610dfa816111db565b91506040840135610e0a816111db565b809150509250925092565b60008060408385031215610e27578182fd5b8235610e32816111db565b946020939093013593505050565b600060208284031215610e51578081fd5b81518015158114610954578182fd5b600060208284031215610e71578081fd5b5051919050565b60008251610e8a8184602087016111ab565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610f078160408501602087016111ab565b601f01601f19169190910160400192915050565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b90815260200190565b60005b838110156111c65781810151838201526020016111ae565b838111156111d5576000848401525b50505050565b6001600160a01b03811681146111f057600080fd5b5056fea2646970667358221220c866cb36a443e13a253b872b8a11e2d3b3c1af25170de49dcbf88148f43d86a164736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x95 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB081E9C8 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x23C JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x241686A0 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x145 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x6F33389E EQ PUSH2 0x19A JUMPI PUSH2 0x115 JUMP JUMPDEST CALLDATASIZE PUSH2 0x115 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xEC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x10E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F PUSH2 0x251 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13C SWAP2 SWAP1 PUSH2 0xE97 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x165 PUSH2 0x160 CALLDATASIZE PUSH1 0x4 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x2CE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x165 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0xDCB JUMP JUMPDEST PUSH2 0x3E4 JUMP JUMPDEST PUSH2 0x165 PUSH2 0x195 CALLDATASIZE PUSH1 0x4 PUSH2 0xE15 JUMP JUMPDEST PUSH2 0x559 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x6A2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13C SWAP2 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x71E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x202 CALLDATASIZE PUSH1 0x4 PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x794 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x222 CALLDATASIZE PUSH1 0x4 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x81D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F PUSH2 0x8B6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x933 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x29C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x2BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x340 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x360 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x37C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xF89 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xF1B JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x939 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x42D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x44F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x47C JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x498 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1104 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x4CB SWAP1 DUP6 SWAP1 PUSH2 0x940 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x4ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x51D SWAP1 DUP3 PUSH2 0x95B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x54E DUP5 DUP4 DUP4 PUSH2 0x99D JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x5A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x5C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x5D2 DUP3 PUSH2 0x9D3 JUMP JUMPDEST ISZERO PUSH2 0x5FB JUMPI DUP1 CALLVALUE EQ PUSH2 0x5F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1001 JUMP JUMPDEST PUSH2 0x641 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x619 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1038 JUMP JUMPDEST PUSH2 0x625 DUP3 CALLER ADDRESS DUP5 PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xFC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x691 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x6ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x70F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH2 0x718 DUP3 PUSH2 0xA33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x769 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x78B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST PUSH2 0x718 DUP3 PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x7DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x801 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x868 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x88A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x901 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x116B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x923 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x10A4 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x954 DUP3 PUSH2 0x94F DUP6 PUSH2 0xA83 JUMP JUMPDEST PUSH2 0xB1A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x954 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xB30 JUMP JUMPDEST PUSH2 0x9A7 DUP4 DUP3 PUSH2 0xB5C JUMP JUMPDEST PUSH2 0x9B2 DUP4 DUP4 DUP4 PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x9CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0xF52 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2A DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x9FB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xEAB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xBAF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0xA7B DUP5 PUSH2 0xA83 JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA8E DUP3 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0xB13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xABE SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0xE97 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAEA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0E SWAP2 SWAP1 PUSH2 0xE60 JUMP JUMPDEST PUSH2 0x718 JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0xB29 JUMPI DUP2 PUSH2 0x954 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xB54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0xEE8 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB89 DUP5 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0xB9D JUMPI PUSH2 0xB98 DUP5 DUP5 DUP5 PUSH2 0xC60 JUMP JUMPDEST PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0xBA7 DUP4 DUP4 PUSH2 0xC6D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA DUP4 PUSH2 0xCE5 JUMP JUMPDEST PUSH2 0xBD6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE3 SWAP1 PUSH2 0x1079 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xBF2 SWAP2 SWAP1 PUSH2 0xE78 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC2F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC34 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xC43 DUP3 DUP3 PUSH2 0xD1E JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0xA2A JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xA2A SWAP2 SWAP1 PUSH2 0xE40 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA7 DUP5 DUP5 DUP5 PUSH2 0xD2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xC89 SWAP1 PUSH2 0xE94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCC6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCCB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xCDA DUP3 DUP3 PUSH2 0xD1E JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0xBA7 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0xD2B JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA7 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD48 SWAP3 SWAP2 SWAP1 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD88 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x11DB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDA5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xDB0 DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xDC0 DUP2 PUSH2 0x11DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xDDF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xDEA DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xDFA DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xE0A DUP2 PUSH2 0x11DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE27 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xE32 DUP2 PUSH2 0x11DB JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE51 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x954 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE71 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xE8A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x11AB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xF07 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x11AB JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11C6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11AE JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x11F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 PUSH7 0xCB36A443E13A25 EXTCODESIZE DUP8 0x2B DUP11 GT 0xE2 0xD3 0xB3 0xC1 0xAF 0x25 OR 0xD 0xE4 SWAP14 0xCB 0xF8 DUP2 0x48 DELEGATECALL RETURNDATASIZE DUP7 LOG1 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "612:1990:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;307:1;542:4;576:11:::0;612:1990:13;;;;;2153:168:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:447;;;;;;;;;;-1:-1:-1;1322:447:12;;;;;:::i;:::-;;:::i;:::-;;3046:910:11;;;;;;;;;;-1:-1:-1;3046:910:11;;;;;:::i;:::-;;:::i;1752:848:13:-;;;;;;:::i;:::-;;:::i;789:226::-;;;;;;;;;;-1:-1:-1;789:226:13;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1182:222::-;;;;;;;;;;-1:-1:-1;1182:222:13;;;;;:::i;:::-;;:::i;1238:218:11:-;;;;;;;;;;-1:-1:-1;1238:218:11;;;;;:::i;:::-;;:::i;2026:236::-;;;;;;;;;;-1:-1:-1;2026:236:11;;;;;:::i;:::-;;:::i;1874:172:12:-;;;;;;;;;;;;;:::i;356:19:17:-;;;;;;;;;;;;;:::i;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1322:447::-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;3046:910:11:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;3373:10:11::2;-1:-1:-1::0;;;;;3373:19:11;::::2;;::::0;:41:::2;;;3405:9;-1:-1:-1::0;;;;;3396:18:11::2;:5;-1:-1:-1::0;;;;;3396:18:11::2;;3373:41;3352:112;;;;-1:-1:-1::0;;;3352:112:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3565:23:11;;::::2;3475:14;3565:23:::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;;;3504:105:::2;::::0;3540:7;;3504:18:::2;:105::i;:::-;3475:134;;3670:1;3661:6;:10;3653:38;;;;-1:-1:-1::0;;;3653:38:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3827:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;:42:::2;::::0;3862:6;3827:34:::2;:42::i;:::-;-1:-1:-1::0;;;;;3772:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:52;;::::2;::::0;;;;;;:97;3908:41:::2;3787:7:::0;3931:9;3942:6;3908:13:::2;:41::i;:::-;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;3046:910:11:o;1752:848:13:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1917:25:13::2;1934:7:::0;1917:16:::2;:25::i;:::-;1913:540;;;1979:6;1966:9;:19;1958:58;;;;-1:-1:-1::0;;;1958:58:13::2;;;;;;;:::i;:::-;1913:540;;;2121:9;:14:::0;2113:60:::2;;;;-1:-1:-1::0;;;2113:60:13::2;;;;;;;:::i;:::-;2212:163;2255:7;2284:10;2324:4;2351:6;2212:21;:163::i;:::-;2187:255;;;;-1:-1:-1::0;;;2187:255:13::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2515:22:13;::::2;;::::0;;;:13:::2;:22;::::0;;;;;;:32;;;::::2;::::0;;2562:31;::::2;::::0;::::2;::::0;2529:7;;2541:6;;2562:31:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;1752:848:13:o;789:226::-;947:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;977:31:13::2;1000:7;977:22;:31::i;:::-;970:38:::0;789:226;-1:-1:-1;;789:226:13:o;1182:222::-;1338:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1368:29:13::2;1389:7;1368:20;:29::i;1238:218:11:-:0;1394:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1424:25:11::2;;::::0;;;:16:::2;:25;::::0;;;;;;1238:218::o;2026:236::-;2195:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2225:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;;::::2;::::0;;;;;;;;;2026:236::o;1874:172:12:-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;356:19:17:-;;;;:::o;382:54::-;307:1;418:4;:11;382:54::o;2268:455:11:-;2379:7;2664:52;2673:9;2684:31;2707:7;2684:22;:31::i;:::-;2664:8;:52::i;:::-;2657:59;2268:455;-1:-1:-1;;;2268:455:11:o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;2729:311:11:-;2861:33;2878:7;2887:6;2861:16;:33::i;:::-;2925:57;2955:7;2964:9;2975:6;2925:29;:57::i;:::-;2904:129;;;;-1:-1:-1;;;2904:129:11;;;;;;;:::i;:::-;2729:311;;;:::o;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1200:442:34:-;1346:4;1381:254;1407:7;1538:6;1566:9;1597:6;1432:189;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1432:189:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:189:34;-1:-1:-1;;;1432:189:34;;;1381:8;:254::i;:::-;1362:273;1200:442;-1:-1:-1;;;;;1200:442:34:o;1021:155:13:-;-1:-1:-1;;;;;1147:22:13;1117:7;1147:22;;;:13;:22;;;;;;;1021:155::o;1495:251::-;-1:-1:-1;;;;;1717:22:13;;1589:7;1717:22;;;:13;:22;;;;;;;;;1677:16;:25;;;;;;1631:31;1731:7;1631:22;:31::i;:::-;:71;:108;;1495:251;-1:-1:-1;;1495:251:13:o;763:223:32:-;826:7;864:16;872:7;864;:16::i;:::-;:115;;939:40;;-1:-1:-1;;;939:40:32;;-1:-1:-1;;;;;939:25:32;;;;;:40;;973:4;;939:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;864:115;;;-1:-1:-1;899:21:32;;763:223;-1:-1:-1;763:223:32:o;391:104:4:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:4;;391:104;-1:-1:-1;391:104:4:o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:5;;;1746:187::o;1112:120:11:-;-1:-1:-1;;;;;1190:25:11;;;;;;;:16;:25;;;;;:35;;;;;;;1112:120::o;2263:307:32:-;2401:4;2436:16;2444:7;2436;:16::i;:::-;:127;;2522:41;2536:7;2545:9;2556:6;2522:13;:41::i;:::-;2436:127;;;2471:32;2485:9;2496:6;2471:13;:32::i;:::-;2417:146;2263:307;-1:-1:-1;;;;2263:307:32:o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;1291:198:32:-;1414:4;1437:45;1455:7;1464:9;1475:6;1437:17;:45::i;992:293::-;1092:4;1113:12;1127:23;1166:9;-1:-1:-1;;;;;1166:14:32;1188:6;1166:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:87;;;;1209:48;1237:7;1246:10;1209:27;:48::i;:::-;-1:-1:-1;1274:4:32;;992:293;-1:-1:-1;;;;992:293:32:o;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;1648:374:34:-;1766:4;1801:214;1827:7;1946:9;1977:6;1852:149;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1852:149:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1852:149:34;-1:-1:-1;;;1852:149:34;;;1801:8;:214::i;708:241:-1:-;;812:2;800:9;791:7;787:23;783:32;780:2;;;-1:-1;;818:12;780:2;85:6;72:20;97:33;124:5;97:33;:::i;956:366::-;;;1077:2;1065:9;1056:7;1052:23;1048:32;1045:2;;;-1:-1;;1083:12;1045:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1135:63;-1:-1;1235:2;1274:22;;72:20;97:33;72:20;97:33;:::i;:::-;1243:63;;;;1039:283;;;;;:::o;1329:507::-;;;;1475:2;1463:9;1454:7;1450:23;1446:32;1443:2;;;-1:-1;;1481:12;1443:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1533:63;-1:-1;1633:2;1672:22;;72:20;97:33;72:20;97:33;:::i;:::-;1641:63;-1:-1;1741:2;1788:22;;217:20;242:41;217:20;242:41;:::i;:::-;1749:71;;;;1437:399;;;;;:::o;1843:366::-;;;1964:2;1952:9;1943:7;1939:23;1935:32;1932:2;;;-1:-1;;1970:12;1932:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2022:63;2122:2;2161:22;;;;497:20;;-1:-1;;;1926:283::o;2216:257::-;;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;-1:-1;;2334:12;2296:2;376:6;370:13;17223:5;16263:13;16256:21;17201:5;17198:32;17188:2;;-1:-1;;17234:12;2480:263;;2595:2;2583:9;2574:7;2570:23;2566:32;2563:2;;;-1:-1;;2601:12;2563:2;-1:-1;645:13;;2557:186;-1:-1;2557:186::o;8105:271::-;;3030:5;15498:12;3141:52;3186:6;3181:3;3174:4;3167:5;3163:16;3141:52;:::i;:::-;3205:16;;;;;8239:137;-1:-1;;8239:137::o;8383:379::-;8747:10;8571:191::o;8769:222::-;-1:-1;;;;;16351:54;;;;2821:37;;8896:2;8881:18;;8867:124::o;8998:444::-;-1:-1;;;;;16351:54;;;2821:37;;16351:54;;;;9345:2;9330:18;;2821:37;9428:2;9413:18;;8056:37;;;;9181:2;9166:18;;9152:290::o;9449:333::-;-1:-1;;;;;16351:54;;;;2821:37;;9768:2;9753:18;;8056:37;9604:2;9589:18;;9575:207::o;9789:310::-;;9936:2;9957:17;9950:47;3378:5;15498:12;15937:6;9936:2;9925:9;9921:18;15925:19;3472:52;3517:6;15965:14;9925:9;15965:14;9936:2;3498:5;3494:16;3472:52;:::i;:::-;16857:7;16841:14;-1:-1;;16837:28;3536:39;;;;15965:14;3536:39;;9907:192;-1:-1;;9907:192::o;10106:416::-;10306:2;10320:47;;;3812:2;10291:18;;;15925:19;3848:33;15965:14;;;3828:54;3901:12;;;10277:245::o;10529:416::-;10729:2;10743:47;;;4152:2;10714:18;;;15925:19;4188:27;15965:14;;;4168:48;4235:12;;;10700:245::o;10952:416::-;11152:2;11166:47;;;4486:2;11137:18;;;15925:19;4522:30;15965:14;;;4502:51;4572:12;;;11123:245::o;11375:416::-;11575:2;11589:47;;;4823:2;11560:18;;;15925:19;4859:34;15965:14;;;4839:55;-1:-1;;;4914:12;;;4907:25;4951:12;;;11546:245::o;11798:416::-;11998:2;12012:47;;;5202:2;11983:18;;;15925:19;5238:28;15965:14;;;5218:49;5286:12;;;11969:245::o;12221:416::-;12421:2;12435:47;;;5537:2;12406:18;;;15925:19;5573:34;15965:14;;;5553:55;-1:-1;;;5628:12;;;5621:25;5665:12;;;12392:245::o;12644:416::-;12844:2;12858:47;;;5916:2;12829:18;;;15925:19;-1:-1;;;15965:14;;;5932:40;5991:12;;;12815:245::o;13067:416::-;13267:2;13281:47;;;6242:2;13252:18;;;15925:19;6278:33;15965:14;;;6258:54;6331:12;;;13238:245::o;13490:416::-;13690:2;13704:47;;;6582:2;13675:18;;;15925:19;-1:-1;;;15965:14;;;6598:38;6655:12;;;13661:245::o;13913:416::-;14113:2;14127:47;;;6906:2;14098:18;;;15925:19;6942:26;15965:14;;;6922:47;6988:12;;;14084:245::o;14336:416::-;14536:2;14550:47;;;7544:2;14521:18;;;15925:19;-1:-1;;;15965:14;;;7560:45;7624:12;;;14507:245::o;14759:416::-;14959:2;14973:47;;;7875:2;14944:18;;;15925:19;7911:28;15965:14;;;7891:49;7959:12;;;14930:245::o;15182:222::-;8056:37;;;15309:2;15294:18;;15280:124::o;16497:268::-;16562:1;16569:101;16583:6;16580:1;16577:13;16569:101;;;16650:11;;;16644:18;16631:11;;;16624:39;16605:2;16598:10;16569:101;;;16685:6;16682:1;16679:13;16676:2;;;16562:1;16741:6;16736:3;16732:16;16725:27;16676:2;;16546:219;;;:::o;16878:117::-;-1:-1;;;;;16351:54;;16937:35;;16927:2;;16986:1;;16976:12;16927:2;16921:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "929800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "depositAlice(address,uint256)": "infinite",
                "exit(address,address,address)": "infinite",
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "getExitableAmount(address,address)": "infinite",
                "getTotalDepositsAlice(address)": "infinite",
                "getTotalDepositsBob(address)": "infinite",
                "getTotalTransferred(address)": "infinite",
                "lock()": "1116",
                "setup(address,address)": "infinite"
              },
              "internal": {
                "_getTotalDepositsAlice(address)": "905",
                "_getTotalDepositsBob(address)": "infinite"
              }
            },
            "methodIdentifiers": {
              "depositAlice(address,uint256)": "635ae901",
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8",
              "getTotalTransferred(address)": "cefa5122",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}}},\"title\":\"CMCDeposit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"Contains logic supporting channel multisig deposits. Channel         funding is asymmetric, with `alice` having to call a deposit         function which tracks the total amount she has deposited so far,         and any other funds in the multisig being attributed to `bob`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/CMCDeposit.sol\":\"CMCDeposit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/CMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCAsset.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/Math.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title CMCAsset\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic to safely transfer channel assets (even if they are\\n///         noncompliant). During adjudication, balances from defunding the\\n///         channel or defunding transfers are registered as withdrawable. Once\\n///         they are registered, the owner (or a watchtower on behalf of the\\n///         owner), may call `exit` to reclaim funds from the multisig.\\n\\ncontract CMCAsset is CMCCore, ICMCAsset {\\n    using SafeMath for uint256;\\n    using LibMath for uint256;\\n\\n    mapping(address => uint256) internal totalTransferred;\\n    mapping(address => mapping(address => uint256))\\n        private exitableAmount;\\n\\n    function registerTransfer(address assetId, uint256 amount) internal {\\n        totalTransferred[assetId] += amount;\\n    }\\n\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return totalTransferred[assetId];\\n    }\\n\\n    function makeExitable(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal {\\n        exitableAmount[assetId][\\n            recipient\\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\\n    }\\n\\n    function makeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) internal {\\n        for (uint256 i = 0; i < 2; i++) {\\n            uint256 amount = balance.amount[i];\\n            if (amount > 0) {\\n                makeExitable(assetId, balance.to[i], amount);\\n            }\\n        }\\n    }\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return exitableAmount[assetId][owner];\\n    }\\n\\n    function getAvailableAmount(address assetId, uint256 maxAmount)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        // Taking the min protects against the case where the multisig\\n        // holds less than the amount that is trying to be withdrawn\\n        // while still allowing the total of the funds to be removed\\n        // without the transaction reverting.\\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\\n    }\\n\\n    function transferAsset(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal {\\n        registerTransfer(assetId, amount);\\n        require(\\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\\n            \\\"CMCAsset: TRANSFER_FAILED\\\"\\n        );\\n    }\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external override onlyViaProxy nonReentrant {\\n        // Either the owner must be the recipient, or in control\\n        // of setting the recipient of the funds to whomever they\\n        // choose\\n        require(\\n            msg.sender == owner || owner == recipient,\\n            \\\"CMCAsset: OWNER_MISMATCH\\\"\\n        );\\n\\n        uint256 amount =\\n            getAvailableAmount(\\n                assetId,\\n                exitableAmount[assetId][owner]\\n            );\\n\\n        // Revert if amount is 0\\n        require(amount > 0, \\\"CMCAsset: NO_OP\\\");\\n\\n        // Reduce the amount claimable from the multisig by the owner\\n        exitableAmount[assetId][\\n            owner\\n        ] = exitableAmount[assetId][owner].sub(amount);\\n\\n        // Perform transfer\\n        transferAsset(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x39c1bd81d8ec2a0fa7c23aad683017f5e2ec28a2db43643020649f935b5b74bf\",\"license\":\"UNLICENSED\"},\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/CMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCDeposit.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibERC20.sol\\\";\\n\\n/// @title CMCDeposit\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic supporting channel multisig deposits. Channel\\n///         funding is asymmetric, with `alice` having to call a deposit\\n///         function which tracks the total amount she has deposited so far,\\n///         and any other funds in the multisig being attributed to `bob`.\\n\\ncontract CMCDeposit is CMCCore, CMCAsset, ICMCDeposit {\\n    mapping(address => uint256) private depositsAlice;\\n\\n    receive() external payable onlyViaProxy nonReentrant {}\\n\\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsAlice(assetId);\\n    }\\n\\n    function _getTotalDepositsAlice(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return depositsAlice[assetId];\\n    }\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsBob(assetId);\\n    }\\n\\n    // Calculated using invariant onchain properties. Note we DONT use safemath here\\n    function _getTotalDepositsBob(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return\\n            LibAsset.getOwnBalance(assetId) +\\n            totalTransferred[assetId] -\\n            depositsAlice[assetId];\\n    }\\n\\n    function depositAlice(address assetId, uint256 amount)\\n        external\\n        payable\\n        override\\n        onlyViaProxy\\n        nonReentrant\\n    {\\n        if (LibAsset.isEther(assetId)) {\\n            require(msg.value == amount, \\\"CMCDeposit: VALUE_MISMATCH\\\");\\n        } else {\\n            // If ETH is sent along, it will be attributed to bob\\n            require(msg.value == 0, \\\"CMCDeposit: ETH_WITH_ERC_TRANSFER\\\");\\n            require(\\n                LibERC20.transferFrom(\\n                    assetId,\\n                    msg.sender,\\n                    address(this),\\n                    amount\\n                ),\\n                \\\"CMCDeposit: ERC20_TRANSFER_FAILED\\\"\\n            );\\n        }\\n        // NOTE: explicitly do NOT use safemath here\\n        depositsAlice[assetId] += amount;\\n        emit AliceDeposited(assetId, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x4d3dd828158289df93d6b5a6419bc5e8d95888aba81e62cd913af1e4c540bece\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/CMCDeposit.sol:CMCDeposit",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/CMCDeposit.sol:CMCDeposit",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/CMCDeposit.sol:CMCDeposit",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              },
              {
                "astId": 2348,
                "contract": "src.sol/CMCDeposit.sol:CMCDeposit",
                "label": "totalTransferred",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2354,
                "contract": "src.sol/CMCDeposit.sol:CMCDeposit",
                "label": "exitableAmount",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 2732,
                "contract": "src.sol/CMCDeposit.sol:CMCDeposit",
                "label": "depositsAlice",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "Contains logic supporting channel multisig deposits. Channel         funding is asymmetric, with `alice` having to call a deposit         function which tracks the total amount she has deposited so far,         and any other funds in the multisig being attributed to `bob`.",
            "version": 1
          }
        }
      },
      "src.sol/CMCWithdraw.sol": {
        "CMCWithdraw": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                }
              ],
              "name": "getWithdrawalTransactionRecord",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              },
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": {
                "params": {
                  "aliceSignature": "Signature of owner a",
                  "bobSignature": "Signature of owner b",
                  "wd": "The withdraw data consisting of semantic withdraw information, i.e. assetId, recipient, and amount; information to make an optional call in addition to the actual transfer, i.e. target address for the call and call payload; additional information, i.e. channel address and nonce."
                }
              }
            },
            "title": "CMCWithdraw",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b6080526117906100546000398061016152806101e55280610419528061052f52806106a6528061073a52806107c3528061085c52506117906000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638c048fc2116100665780638c048fc2146100f1578063cefa512214610111578063e985256914610131578063eeb30fea14610144578063f83d08ba1461014c57610093565b8063241686a0146100985780632c889aa1146100b65780632d34ba79146100cb5780635bc9d96d146100de575b600080fd5b6100a0610154565b6040516100ad919061126b565b60405180910390f35b6100c96100c4366004611081565b6101da565b005b6100c96100d9366004610fac565b61040e565b6100c96100ec366004610fe4565b610524565b6101046100ff36600461104e565b610699565b6040516100ad9190611298565b61012461011f366004610f90565b61072d565b6040516100ad9190611709565b61012461013f366004610fac565b6107b6565b6100a061084f565b6101246108cc565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101a85760405162461bcd60e51b815260040161019f9061169d565b60405180910390fd5b6001600054146101ca5760405162461bcd60e51b815260040161019f9061159f565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156102235760405162461bcd60e51b815260040161019f9061169d565b6001600054146102455760405162461bcd60e51b815260040161019f9061159f565b600260005584306102596020830183610f90565b6001600160a01b03161461027f5760405162461bcd60e51b815260040161019f90611343565b600061028a876108d2565b90506102998187878787610902565b60008181526005602052604090205460ff16156102c85760405162461bcd60e51b815260040161019f906114fb565b6000818152600560209081526040808320805460ff19166001179055610300916102f6918b01908b01610f90565b8960600135610a0c565b9050600081118061032a5750600061031e60c08a0160a08b01610f90565b6001600160a01b031614155b6103465760405162461bcd60e51b815260040161019f9061137a565b61036f61035960408a0160208b01610f90565b61036960608b0160408c01610f90565b83610a27565b600061038160c08a0160a08b01610f90565b6001600160a01b0316146103ff5761039f60c0890160a08a01610f90565b6001600160a01b031663f50cd32c89836040518363ffffffff1660e01b81526004016103cc9291906116e7565b600060405180830381600087803b1580156103e657600080fd5b505af11580156103fa573d6000803e3d6000fd5b505050505b50506001600055505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104575760405162461bcd60e51b815260040161019f9061169d565b6001546001600160a01b0316156104805760405162461bcd60e51b815260040161019f9061166d565b6001600160a01b038216158015906104a057506001600160a01b03811615155b6104bc5760405162461bcd60e51b815260040161019f906114c4565b806001600160a01b0316826001600160a01b031614156104ee5760405162461bcd60e51b815260040161019f906113dd565b6104f6610a5d565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561056d5760405162461bcd60e51b815260040161019f9061169d565b60016000541461058f5760405162461bcd60e51b815260040161019f9061159f565b6002600055336001600160a01b03831614806105bc5750806001600160a01b0316826001600160a01b0316145b6105d85760405162461bcd60e51b815260040161019f90611636565b6001600160a01b03808416600090815260046020908152604080832093861683529290529081205461060b908590610a0c565b90506000811161062d5760405162461bcd60e51b815260040161019f906115d6565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205461065d9082610a64565b6001600160a01b0380861660009081526004602090815260408083209388168352929052205561068e848383610a27565b505060016000555050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106e45760405162461bcd60e51b815260040161019f9061169d565b6001600054146107065760405162461bcd60e51b815260040161019f9061159f565b60056000610713846108d2565b815260208101919091526040016000205460ff1692915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107785760405162461bcd60e51b815260040161019f9061169d565b60016000541461079a5760405162461bcd60e51b815260040161019f9061159f565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108015760405162461bcd60e51b815260040161019f9061169d565b6001600054146108235760405162461bcd60e51b815260040161019f9061159f565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561089a5760405162461bcd60e51b815260040161019f9061169d565b6001600054146108bc5760405162461bcd60e51b815260040161019f9061159f565b506001546001600160a01b031690565b60005481565b6000816040516020016108e591906116d4565b604051602081830303815290604052805190602001209050919050565b60006001866040516020016109189291906112c1565b60405160208183030381529060405280519060200120905061097e85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600154859392506001600160a01b03169050610aa6565b61099a5760405162461bcd60e51b815260040161019f906115ff565b6109e883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600254859392506001600160a01b03169050610aa6565b610a045760405162461bcd60e51b815260040161019f9061148d565b505050505050565b6000610a2082610a1b85610ace565b610b66565b9392505050565b610a318382610b7c565b610a3c838383610b9e565b610a585760405162461bcd60e51b815260040161019f90611414565b505050565b6001600055565b6000610a2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bcf565b6000816001600160a01b0316610abc8585610bfb565b6001600160a01b031614949350505050565b6000610ad982610c13565b610b5e576040516370a0823160e01b81526001600160a01b038316906370a0823190610b0990309060040161126b565b60206040518083038186803b158015610b2157600080fd5b505afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b599190611112565b610b60565b475b92915050565b6000818310610b755781610a20565b5090919050565b6001600160a01b03909116600090815260036020526040902080549091019055565b6000610ba984610c13565b610bbd57610bb8848484610c20565b610bc7565b610bc78383610c2d565b949350505050565b60008184841115610bf35760405162461bcd60e51b815260040161019f91906112d9565b505050900390565b600080610c0784610ca5565b9050610bc78184610cb8565b6001600160a01b03161590565b6000610bc7848484610de6565b6000806060846001600160a01b031684604051610c4990611268565b60006040518083038185875af1925050503d8060008114610c86576040519150601f19603f3d011682016040523d82523d6000602084013e610c8b565b606091505b5091509150610c9a8282610e2e565b506001949350505050565b6000816040516020016108e59190611237565b60008151604114610cdb5760405162461bcd60e51b815260040161019f906113a6565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610d2d5760405162461bcd60e51b815260040161019f9061144b565b8060ff16601b14158015610d4557508060ff16601c14155b15610d625760405162461bcd60e51b815260040161019f90611532565b600060018783868660405160008152602001604052604051610d8794939291906112a3565b6020604051602081039080840390855afa158015610da9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddc5760405162461bcd60e51b815260040161019f9061130c565b9695505050505050565b6000610bc7848484604051602401610dff92919061127f565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610e3f565b81610e3b57805160208201fd5b5050565b6000610e4a83610ef9565b610e665760405162461bcd60e51b815260040161019f90611574565b60006060846001600160a01b031684604051610e82919061121b565b6000604051808303816000865af19150503d8060008114610ebf576040519150601f19603f3d011682016040523d82523d6000602084013e610ec4565b606091505b5091509150610ed38282610e2e565b80511580610ef0575080806020019051810190610ef0919061102e565b95945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610bc7575050151592915050565b60008083601f840112610f43578182fd5b50813567ffffffffffffffff811115610f5a578182fd5b602083019150836020828501011115610f7257600080fd5b9250929050565b600060e08284031215610f8a578081fd5b50919050565b600060208284031215610fa1578081fd5b8135610a2081611742565b60008060408385031215610fbe578081fd5b8235610fc981611742565b91506020830135610fd981611742565b809150509250929050565b600080600060608486031215610ff8578081fd5b833561100381611742565b9250602084013561101381611742565b9150604084013561102381611742565b809150509250925092565b60006020828403121561103f578081fd5b81518015158114610a20578182fd5b60006020828403121561105f578081fd5b813567ffffffffffffffff811115611075578182fd5b610bc784828501610f79565b600080600080600060608688031215611098578081fd5b853567ffffffffffffffff808211156110af578283fd5b6110bb89838a01610f79565b965060208801359150808211156110d0578283fd5b6110dc89838a01610f32565b909650945060408801359150808211156110f4578283fd5b5061110188828901610f32565b969995985093965092949392505050565b600060208284031215611123578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000813561116181611742565b6001600160a01b03908116845260208301359061117d82611742565b908116602085015260408301359061119482611742565b8082166040860152606084013560608601526080840135608086015260a084013591506111c082611742565b1660a084015260c082013536839003601e190181126111dd578182fd5b8201803567ffffffffffffffff8111156111f5578283fd5b803603841315611203578283fd5b60e060c0860152610ef060e08601826020850161112a565b6000825161122d818460208701611712565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b60408101600284106112cf57fe5b9281526020015290565b60006020825282518060208401526112f8816040850160208701611712565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601d908201527f434d4357697468647261773a204348414e4e454c5f4d49534d41544348000000604082015260600190565b6020808252601290820152710434d4357697468647261773a204e4f5f4f560741b604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601c908201527f434d4357697468647261773a20494e56414c49445f424f425f53494700000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b6020808252601d908201527f434d4357697468647261773a20414c52454144595f4558454355544544000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b6020808252601e908201527f434d4357697468647261773a20494e56414c49445f414c4943455f5349470000604082015260600190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b600060208252610a206020830184611154565b6000604082526116fa6040830185611154565b90508260208301529392505050565b90815260200190565b60005b8381101561172d578181015183820152602001611715565b8381111561173c576000848401525b50505050565b6001600160a01b038116811461175757600080fd5b5056fea2646970667358221220f265a1d7c8d094857bdd087286da0aa01ff24bb423a5b6abf13da925debad26f64736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0x1790 PUSH2 0x54 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x161 MSTORE DUP1 PUSH2 0x1E5 MSTORE DUP1 PUSH2 0x419 MSTORE DUP1 PUSH2 0x52F MSTORE DUP1 PUSH2 0x6A6 MSTORE DUP1 PUSH2 0x73A MSTORE DUP1 PUSH2 0x7C3 MSTORE DUP1 PUSH2 0x85C MSTORE POP PUSH2 0x1790 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C048FC2 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x8C048FC2 EQ PUSH2 0xF1 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x14C JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x241686A0 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x2C889AA1 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0xDE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x126B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0xC4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1081 JUMP JUMPDEST PUSH2 0x1DA JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC9 PUSH2 0xD9 CALLDATASIZE PUSH1 0x4 PUSH2 0xFAC JUMP JUMPDEST PUSH2 0x40E JUMP JUMPDEST PUSH2 0xC9 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xFE4 JUMP JUMPDEST PUSH2 0x524 JUMP JUMPDEST PUSH2 0x104 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x104E JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0xF90 JUMP JUMPDEST PUSH2 0x72D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x1709 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0xFAC JUMP JUMPDEST PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x84F JUMP JUMPDEST PUSH2 0x124 PUSH2 0x8CC JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x223 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x245 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x259 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x27F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1343 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28A DUP8 PUSH2 0x8D2 JUMP JUMPDEST SWAP1 POP PUSH2 0x299 DUP2 DUP8 DUP8 DUP8 DUP8 PUSH2 0x902 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x14FB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x300 SWAP2 PUSH2 0x2F6 SWAP2 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST DUP10 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xA0C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 PUSH2 0x32A JUMPI POP PUSH1 0x0 PUSH2 0x31E PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x36F PUSH2 0x359 PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH2 0x369 PUSH1 0x60 DUP12 ADD PUSH1 0x40 DUP13 ADD PUSH2 0xF90 JUMP JUMPDEST DUP4 PUSH2 0xA27 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x381 PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x3FF JUMPI PUSH2 0x39F PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF50CD32C DUP10 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3CC SWAP3 SWAP2 SWAP1 PUSH2 0x16E7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x457 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x480 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x166D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x4A0 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x4BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x14C4 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x13DD JUMP JUMPDEST PUSH2 0x4F6 PUSH2 0xA5D JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x56D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x58F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x5BC JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x5D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1636 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x60B SWAP1 DUP6 SWAP1 PUSH2 0xA0C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x62D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x15D6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x65D SWAP1 DUP3 PUSH2 0xA64 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x68E DUP5 DUP4 DUP4 PUSH2 0xA27 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x6E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x706 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 PUSH2 0x713 DUP5 PUSH2 0x8D2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x778 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x79A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x801 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x823 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x89A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x8BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x8E5 SWAP2 SWAP1 PUSH2 0x16D4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x918 SWAP3 SWAP2 SWAP1 PUSH2 0x12C1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x97E DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x1 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x99A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x15FF JUMP JUMPDEST PUSH2 0x9E8 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x2 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x148D JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA20 DUP3 PUSH2 0xA1B DUP6 PUSH2 0xACE JUMP JUMPDEST PUSH2 0xB66 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xA31 DUP4 DUP3 PUSH2 0xB7C JUMP JUMPDEST PUSH2 0xA3C DUP4 DUP4 DUP4 PUSH2 0xB9E JUMP JUMPDEST PUSH2 0xA58 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1414 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA20 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xBCF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xABC DUP6 DUP6 PUSH2 0xBFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD9 DUP3 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0xB5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xB09 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x126B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB59 SWAP2 SWAP1 PUSH2 0x1112 JUMP JUMPDEST PUSH2 0xB60 JUMP JUMPDEST SELFBALANCE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0xB75 JUMPI DUP2 PUSH2 0xA20 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA9 DUP5 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0xBBD JUMPI PUSH2 0xBB8 DUP5 DUP5 DUP5 PUSH2 0xC20 JUMP JUMPDEST PUSH2 0xBC7 JUMP JUMPDEST PUSH2 0xBC7 DUP4 DUP4 PUSH2 0xC2D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xBF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP2 SWAP1 PUSH2 0x12D9 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC07 DUP5 PUSH2 0xCA5 JUMP JUMPDEST SWAP1 POP PUSH2 0xBC7 DUP2 DUP5 PUSH2 0xCB8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBC7 DUP5 DUP5 DUP5 PUSH2 0xDE6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xC49 SWAP1 PUSH2 0x1268 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC86 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xC9A DUP3 DUP3 PUSH2 0xE2E JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x8E5 SWAP2 SWAP1 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0xCDB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x13A6 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0xD2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x144B JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xD45 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xD62 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1532 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0xD87 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x130C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBC7 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xDFF SWAP3 SWAP2 SWAP1 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xE3F JUMP JUMPDEST DUP2 PUSH2 0xE3B JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE4A DUP4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0xE66 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1574 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xE82 SWAP2 SWAP1 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xEBF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xEC4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xED3 DUP3 DUP3 PUSH2 0xE2E JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0xEF0 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xEF0 SWAP2 SWAP1 PUSH2 0x102E JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0xBC7 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xF43 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF5A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF8A JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFA1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA20 DUP2 PUSH2 0x1742 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFBE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xFC9 DUP2 PUSH2 0x1742 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xFD9 DUP2 PUSH2 0x1742 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xFF8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1003 DUP2 PUSH2 0x1742 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1013 DUP2 PUSH2 0x1742 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1023 DUP2 PUSH2 0x1742 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x103F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xA20 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x105F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1075 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xBC7 DUP5 DUP3 DUP6 ADD PUSH2 0xF79 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1098 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x10AF JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x10BB DUP10 DUP4 DUP11 ADD PUSH2 0xF79 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x10D0 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x10DC DUP10 DUP4 DUP11 ADD PUSH2 0xF32 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x10F4 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x1101 DUP9 DUP3 DUP10 ADD PUSH2 0xF32 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1123 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH2 0x1161 DUP2 PUSH2 0x1742 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP5 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x117D DUP3 PUSH2 0x1742 JUMP JUMPDEST SWAP1 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1194 DUP3 PUSH2 0x1742 JUMP JUMPDEST DUP1 DUP3 AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x11C0 DUP3 PUSH2 0x1742 JUMP JUMPDEST AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD CALLDATASIZE DUP4 SWAP1 SUB PUSH1 0x1E NOT ADD DUP2 SLT PUSH2 0x11DD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11F5 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x1203 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xE0 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0xEF0 PUSH1 0xE0 DUP7 ADD DUP3 PUSH1 0x20 DUP6 ADD PUSH2 0x112A JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x122D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1712 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x12CF JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12F8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A204348414E4E454C5F4D49534D41544348000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x434D4357697468647261773A204E4F5F4F5 PUSH1 0x74 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F424F425F53494700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20414C52454144595F4558454355544544000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F414C4943455F5349470000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xA20 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1154 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x16FA PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1154 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x172D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1715 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x173C JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE PUSH6 0xA1D7C8D09485 PUSH28 0xDD087286DA0AA01FF24BB423A5B6ABF13DA925DEBAD26F64736F6C63 NUMBER STOP SMOD ADD STOP CALLER ",
              "sourceMap": "736:2908:14:-:0;;;;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;736:2908:14;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 353
                  },
                  {
                    "length": 32,
                    "start": 485
                  },
                  {
                    "length": 32,
                    "start": 1049
                  },
                  {
                    "length": 32,
                    "start": 1327
                  },
                  {
                    "length": 32,
                    "start": 1702
                  },
                  {
                    "length": 32,
                    "start": 1850
                  },
                  {
                    "length": 32,
                    "start": 1987
                  },
                  {
                    "length": 32,
                    "start": 2140
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100935760003560e01c80638c048fc2116100665780638c048fc2146100f1578063cefa512214610111578063e985256914610131578063eeb30fea14610144578063f83d08ba1461014c57610093565b8063241686a0146100985780632c889aa1146100b65780632d34ba79146100cb5780635bc9d96d146100de575b600080fd5b6100a0610154565b6040516100ad919061126b565b60405180910390f35b6100c96100c4366004611081565b6101da565b005b6100c96100d9366004610fac565b61040e565b6100c96100ec366004610fe4565b610524565b6101046100ff36600461104e565b610699565b6040516100ad9190611298565b61012461011f366004610f90565b61072d565b6040516100ad9190611709565b61012461013f366004610fac565b6107b6565b6100a061084f565b6101246108cc565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101a85760405162461bcd60e51b815260040161019f9061169d565b60405180910390fd5b6001600054146101ca5760405162461bcd60e51b815260040161019f9061159f565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156102235760405162461bcd60e51b815260040161019f9061169d565b6001600054146102455760405162461bcd60e51b815260040161019f9061159f565b600260005584306102596020830183610f90565b6001600160a01b03161461027f5760405162461bcd60e51b815260040161019f90611343565b600061028a876108d2565b90506102998187878787610902565b60008181526005602052604090205460ff16156102c85760405162461bcd60e51b815260040161019f906114fb565b6000818152600560209081526040808320805460ff19166001179055610300916102f6918b01908b01610f90565b8960600135610a0c565b9050600081118061032a5750600061031e60c08a0160a08b01610f90565b6001600160a01b031614155b6103465760405162461bcd60e51b815260040161019f9061137a565b61036f61035960408a0160208b01610f90565b61036960608b0160408c01610f90565b83610a27565b600061038160c08a0160a08b01610f90565b6001600160a01b0316146103ff5761039f60c0890160a08a01610f90565b6001600160a01b031663f50cd32c89836040518363ffffffff1660e01b81526004016103cc9291906116e7565b600060405180830381600087803b1580156103e657600080fd5b505af11580156103fa573d6000803e3d6000fd5b505050505b50506001600055505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104575760405162461bcd60e51b815260040161019f9061169d565b6001546001600160a01b0316156104805760405162461bcd60e51b815260040161019f9061166d565b6001600160a01b038216158015906104a057506001600160a01b03811615155b6104bc5760405162461bcd60e51b815260040161019f906114c4565b806001600160a01b0316826001600160a01b031614156104ee5760405162461bcd60e51b815260040161019f906113dd565b6104f6610a5d565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561056d5760405162461bcd60e51b815260040161019f9061169d565b60016000541461058f5760405162461bcd60e51b815260040161019f9061159f565b6002600055336001600160a01b03831614806105bc5750806001600160a01b0316826001600160a01b0316145b6105d85760405162461bcd60e51b815260040161019f90611636565b6001600160a01b03808416600090815260046020908152604080832093861683529290529081205461060b908590610a0c565b90506000811161062d5760405162461bcd60e51b815260040161019f906115d6565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205461065d9082610a64565b6001600160a01b0380861660009081526004602090815260408083209388168352929052205561068e848383610a27565b505060016000555050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106e45760405162461bcd60e51b815260040161019f9061169d565b6001600054146107065760405162461bcd60e51b815260040161019f9061159f565b60056000610713846108d2565b815260208101919091526040016000205460ff1692915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107785760405162461bcd60e51b815260040161019f9061169d565b60016000541461079a5760405162461bcd60e51b815260040161019f9061159f565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108015760405162461bcd60e51b815260040161019f9061169d565b6001600054146108235760405162461bcd60e51b815260040161019f9061159f565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561089a5760405162461bcd60e51b815260040161019f9061169d565b6001600054146108bc5760405162461bcd60e51b815260040161019f9061159f565b506001546001600160a01b031690565b60005481565b6000816040516020016108e591906116d4565b604051602081830303815290604052805190602001209050919050565b60006001866040516020016109189291906112c1565b60405160208183030381529060405280519060200120905061097e85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600154859392506001600160a01b03169050610aa6565b61099a5760405162461bcd60e51b815260040161019f906115ff565b6109e883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600254859392506001600160a01b03169050610aa6565b610a045760405162461bcd60e51b815260040161019f9061148d565b505050505050565b6000610a2082610a1b85610ace565b610b66565b9392505050565b610a318382610b7c565b610a3c838383610b9e565b610a585760405162461bcd60e51b815260040161019f90611414565b505050565b6001600055565b6000610a2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bcf565b6000816001600160a01b0316610abc8585610bfb565b6001600160a01b031614949350505050565b6000610ad982610c13565b610b5e576040516370a0823160e01b81526001600160a01b038316906370a0823190610b0990309060040161126b565b60206040518083038186803b158015610b2157600080fd5b505afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b599190611112565b610b60565b475b92915050565b6000818310610b755781610a20565b5090919050565b6001600160a01b03909116600090815260036020526040902080549091019055565b6000610ba984610c13565b610bbd57610bb8848484610c20565b610bc7565b610bc78383610c2d565b949350505050565b60008184841115610bf35760405162461bcd60e51b815260040161019f91906112d9565b505050900390565b600080610c0784610ca5565b9050610bc78184610cb8565b6001600160a01b03161590565b6000610bc7848484610de6565b6000806060846001600160a01b031684604051610c4990611268565b60006040518083038185875af1925050503d8060008114610c86576040519150601f19603f3d011682016040523d82523d6000602084013e610c8b565b606091505b5091509150610c9a8282610e2e565b506001949350505050565b6000816040516020016108e59190611237565b60008151604114610cdb5760405162461bcd60e51b815260040161019f906113a6565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610d2d5760405162461bcd60e51b815260040161019f9061144b565b8060ff16601b14158015610d4557508060ff16601c14155b15610d625760405162461bcd60e51b815260040161019f90611532565b600060018783868660405160008152602001604052604051610d8794939291906112a3565b6020604051602081039080840390855afa158015610da9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddc5760405162461bcd60e51b815260040161019f9061130c565b9695505050505050565b6000610bc7848484604051602401610dff92919061127f565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610e3f565b81610e3b57805160208201fd5b5050565b6000610e4a83610ef9565b610e665760405162461bcd60e51b815260040161019f90611574565b60006060846001600160a01b031684604051610e82919061121b565b6000604051808303816000865af19150503d8060008114610ebf576040519150601f19603f3d011682016040523d82523d6000602084013e610ec4565b606091505b5091509150610ed38282610e2e565b80511580610ef0575080806020019051810190610ef0919061102e565b95945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610bc7575050151592915050565b60008083601f840112610f43578182fd5b50813567ffffffffffffffff811115610f5a578182fd5b602083019150836020828501011115610f7257600080fd5b9250929050565b600060e08284031215610f8a578081fd5b50919050565b600060208284031215610fa1578081fd5b8135610a2081611742565b60008060408385031215610fbe578081fd5b8235610fc981611742565b91506020830135610fd981611742565b809150509250929050565b600080600060608486031215610ff8578081fd5b833561100381611742565b9250602084013561101381611742565b9150604084013561102381611742565b809150509250925092565b60006020828403121561103f578081fd5b81518015158114610a20578182fd5b60006020828403121561105f578081fd5b813567ffffffffffffffff811115611075578182fd5b610bc784828501610f79565b600080600080600060608688031215611098578081fd5b853567ffffffffffffffff808211156110af578283fd5b6110bb89838a01610f79565b965060208801359150808211156110d0578283fd5b6110dc89838a01610f32565b909650945060408801359150808211156110f4578283fd5b5061110188828901610f32565b969995985093965092949392505050565b600060208284031215611123578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000813561116181611742565b6001600160a01b03908116845260208301359061117d82611742565b908116602085015260408301359061119482611742565b8082166040860152606084013560608601526080840135608086015260a084013591506111c082611742565b1660a084015260c082013536839003601e190181126111dd578182fd5b8201803567ffffffffffffffff8111156111f5578283fd5b803603841315611203578283fd5b60e060c0860152610ef060e08601826020850161112a565b6000825161122d818460208701611712565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b60408101600284106112cf57fe5b9281526020015290565b60006020825282518060208401526112f8816040850160208701611712565b601f01601f19169190910160400192915050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601d908201527f434d4357697468647261773a204348414e4e454c5f4d49534d41544348000000604082015260600190565b6020808252601290820152710434d4357697468647261773a204e4f5f4f560741b604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601c908201527f434d4357697468647261773a20494e56414c49445f424f425f53494700000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b6020808252601d908201527f434d4357697468647261773a20414c52454144595f4558454355544544000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b6020808252601e908201527f434d4357697468647261773a20494e56414c49445f414c4943455f5349470000604082015260600190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b600060208252610a206020830184611154565b6000604082526116fa6040830185611154565b90508260208301529392505050565b90815260200190565b60005b8381101561172d578181015183820152602001611715565b8381111561173c576000848401525b50505050565b6001600160a01b038116811461175757600080fd5b5056fea2646970667358221220f265a1d7c8d094857bdd087286da0aa01ff24bb423a5b6abf13da925debad26f64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C048FC2 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x8C048FC2 EQ PUSH2 0xF1 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x14C JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x241686A0 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x2C889AA1 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0xDE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x126B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0xC4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1081 JUMP JUMPDEST PUSH2 0x1DA JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC9 PUSH2 0xD9 CALLDATASIZE PUSH1 0x4 PUSH2 0xFAC JUMP JUMPDEST PUSH2 0x40E JUMP JUMPDEST PUSH2 0xC9 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xFE4 JUMP JUMPDEST PUSH2 0x524 JUMP JUMPDEST PUSH2 0x104 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x104E JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0xF90 JUMP JUMPDEST PUSH2 0x72D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x1709 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0xFAC JUMP JUMPDEST PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x84F JUMP JUMPDEST PUSH2 0x124 PUSH2 0x8CC JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x223 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x245 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x259 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x27F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1343 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28A DUP8 PUSH2 0x8D2 JUMP JUMPDEST SWAP1 POP PUSH2 0x299 DUP2 DUP8 DUP8 DUP8 DUP8 PUSH2 0x902 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x14FB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x300 SWAP2 PUSH2 0x2F6 SWAP2 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST DUP10 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xA0C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 PUSH2 0x32A JUMPI POP PUSH1 0x0 PUSH2 0x31E PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x36F PUSH2 0x359 PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH2 0x369 PUSH1 0x60 DUP12 ADD PUSH1 0x40 DUP13 ADD PUSH2 0xF90 JUMP JUMPDEST DUP4 PUSH2 0xA27 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x381 PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x3FF JUMPI PUSH2 0x39F PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0xF90 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF50CD32C DUP10 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3CC SWAP3 SWAP2 SWAP1 PUSH2 0x16E7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x457 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x480 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x166D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x4A0 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0x4BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x14C4 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x13DD JUMP JUMPDEST PUSH2 0x4F6 PUSH2 0xA5D JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x56D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x58F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x5BC JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x5D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1636 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x60B SWAP1 DUP6 SWAP1 PUSH2 0xA0C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x62D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x15D6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x65D SWAP1 DUP3 PUSH2 0xA64 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x68E DUP5 DUP4 DUP4 PUSH2 0xA27 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x6E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x706 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 PUSH2 0x713 DUP5 PUSH2 0x8D2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x778 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x79A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x801 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x823 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x89A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x169D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x8BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x159F JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x8E5 SWAP2 SWAP1 PUSH2 0x16D4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x918 SWAP3 SWAP2 SWAP1 PUSH2 0x12C1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x97E DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x1 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x99A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x15FF JUMP JUMPDEST PUSH2 0x9E8 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x2 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x148D JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA20 DUP3 PUSH2 0xA1B DUP6 PUSH2 0xACE JUMP JUMPDEST PUSH2 0xB66 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xA31 DUP4 DUP3 PUSH2 0xB7C JUMP JUMPDEST PUSH2 0xA3C DUP4 DUP4 DUP4 PUSH2 0xB9E JUMP JUMPDEST PUSH2 0xA58 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1414 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA20 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xBCF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xABC DUP6 DUP6 PUSH2 0xBFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD9 DUP3 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0xB5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xB09 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x126B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB59 SWAP2 SWAP1 PUSH2 0x1112 JUMP JUMPDEST PUSH2 0xB60 JUMP JUMPDEST SELFBALANCE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0xB75 JUMPI DUP2 PUSH2 0xA20 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA9 DUP5 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0xBBD JUMPI PUSH2 0xBB8 DUP5 DUP5 DUP5 PUSH2 0xC20 JUMP JUMPDEST PUSH2 0xBC7 JUMP JUMPDEST PUSH2 0xBC7 DUP4 DUP4 PUSH2 0xC2D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xBF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP2 SWAP1 PUSH2 0x12D9 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC07 DUP5 PUSH2 0xCA5 JUMP JUMPDEST SWAP1 POP PUSH2 0xBC7 DUP2 DUP5 PUSH2 0xCB8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBC7 DUP5 DUP5 DUP5 PUSH2 0xDE6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xC49 SWAP1 PUSH2 0x1268 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC86 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xC9A DUP3 DUP3 PUSH2 0xE2E JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x8E5 SWAP2 SWAP1 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0xCDB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x13A6 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0xD2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x144B JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xD45 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xD62 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1532 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0xD87 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x130C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBC7 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xDFF SWAP3 SWAP2 SWAP1 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xE3F JUMP JUMPDEST DUP2 PUSH2 0xE3B JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE4A DUP4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0xE66 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP1 PUSH2 0x1574 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0xE82 SWAP2 SWAP1 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xEBF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xEC4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xED3 DUP3 DUP3 PUSH2 0xE2E JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0xEF0 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xEF0 SWAP2 SWAP1 PUSH2 0x102E JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0xBC7 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xF43 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF5A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF8A JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFA1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA20 DUP2 PUSH2 0x1742 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFBE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xFC9 DUP2 PUSH2 0x1742 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xFD9 DUP2 PUSH2 0x1742 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xFF8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1003 DUP2 PUSH2 0x1742 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1013 DUP2 PUSH2 0x1742 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1023 DUP2 PUSH2 0x1742 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x103F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xA20 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x105F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1075 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xBC7 DUP5 DUP3 DUP6 ADD PUSH2 0xF79 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1098 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x10AF JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x10BB DUP10 DUP4 DUP11 ADD PUSH2 0xF79 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x10D0 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x10DC DUP10 DUP4 DUP11 ADD PUSH2 0xF32 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x10F4 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x1101 DUP9 DUP3 DUP10 ADD PUSH2 0xF32 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1123 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH2 0x1161 DUP2 PUSH2 0x1742 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP5 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x117D DUP3 PUSH2 0x1742 JUMP JUMPDEST SWAP1 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1194 DUP3 PUSH2 0x1742 JUMP JUMPDEST DUP1 DUP3 AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x11C0 DUP3 PUSH2 0x1742 JUMP JUMPDEST AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD CALLDATASIZE DUP4 SWAP1 SUB PUSH1 0x1E NOT ADD DUP2 SLT PUSH2 0x11DD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11F5 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x1203 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xE0 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0xEF0 PUSH1 0xE0 DUP7 ADD DUP3 PUSH1 0x20 DUP6 ADD PUSH2 0x112A JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x122D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1712 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x12CF JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12F8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A204348414E4E454C5F4D49534D41544348000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x434D4357697468647261773A204E4F5F4F5 PUSH1 0x74 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F424F425F53494700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20414C52454144595F4558454355544544000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F414C4943455F5349470000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xA20 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1154 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x16FA PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1154 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x172D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1715 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x173C JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE PUSH6 0xA1D7C8D09485 PUSH28 0xDD087286DA0AA01FF24BB423A5B6ABF13DA925DEBAD26F64736F6C63 NUMBER STOP SMOD ADD STOP CALLER ",
              "sourceMap": "736:2908:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:168:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1767:1166:14;;;;;;:::i;:::-;;:::i;:::-;;1322:447:12;;;;;;:::i;:::-;;:::i;3046:910:11:-;;;;;;:::i;:::-;;:::i;1089:242:14:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1238:218:11:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2026:236::-;;;;;;:::i;:::-;;:::i;1874:172:12:-;;;:::i;356:19:17:-;;;:::i;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1767:1166:14:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1966:2:14;1005:4:::2;976:17;;::::0;::::2;1966:2:::0;976:17:::2;:::i;:::-;-1:-1:-1::0;;;;;976:34:14::2;;955:110;;;;-1:-1:-1::0;;;955:110:14::2;;;;;;;:::i;:::-;2005:14:::3;2022:20;2039:2;2022:16;:20::i;:::-;2005:37;;2120:72;2155:6;2163:14;;2179:12;;2120:34;:72::i;:::-;2241:18;::::0;;;:10:::3;:18;::::0;;;;;::::3;;2240:19;2232:61;;;;-1:-1:-1::0;;;2232:61:14::3;;;;;;;:::i;:::-;2303:18;::::0;;;:10:::3;:18;::::0;;;;;;;:25;;-1:-1:-1;;2303:25:14::3;2324:4;2303:25;::::0;;2412:41:::3;::::0;2431:10:::3;::::0;;;;;::::3;;:::i;:::-;2443:2;:9;;;2412:18;:41::i;:::-;2389:64;;2557:1;2542:12;:16;:43;;;-1:-1:-1::0;2583:1:14::3;2562:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2562:23:14::3;;;2542:43;2521:108;;;;-1:-1:-1::0;;;2521:108:14::3;;;;;;;:::i;:::-;2685:53;2699:10;::::0;;;::::3;::::0;::::3;;:::i;:::-;2711:12;::::0;;;::::3;::::0;::::3;;:::i;:::-;2725;2685:13;:53::i;:::-;2847:1;2826:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2826:23:14::3;;2822:105;;2880:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2865:33:14::3;;2899:2;2903:12;2865:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;2822:105;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;;1767:1166:14:o;1322:447:12:-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;3046:910:11:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;3373:10:11::2;-1:-1:-1::0;;;;;3373:19:11;::::2;;::::0;:41:::2;;;3405:9;-1:-1:-1::0;;;;;3396:18:11::2;:5;-1:-1:-1::0;;;;;3396:18:11::2;;3373:41;3352:112;;;;-1:-1:-1::0;;;3352:112:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3565:23:11;;::::2;3475:14;3565:23:::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;;;3504:105:::2;::::0;3540:7;;3504:18:::2;:105::i;:::-;3475:134;;3670:1;3661:6;:10;3653:38;;;;-1:-1:-1::0;;;3653:38:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3827:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;:42:::2;::::0;3862:6;3827:34:::2;:42::i;:::-;-1:-1:-1::0;;;;;3772:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:52;;::::2;::::0;;;;;;:97;3908:41:::2;3787:7:::0;3931:9;3942:6;3908:13:::2;:41::i;:::-;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;3046:910:11:o;1089:242:14:-;1265:4;1024::12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1292:10:14::2;:32;1303:20;1320:2;1303:16;:20::i;:::-;1292:32:::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;1292:32:14;;::::2;;::::0;1089:242;-1:-1:-1;;1089:242:14:o;1238:218:11:-;1394:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1424:25:11::2;;::::0;;;:16:::2;:25;::::0;;;;;;1238:218::o;2026:236::-;2195:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2225:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;;::::2;::::0;;;;;;;;;2026:236::o;1874:172:12:-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;356:19:17:-;;;;:::o;3481:161:14:-;3580:7;3631:2;3620:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;3610:25;;;;;;3603:32;;3481:161;;;:::o;2939:536::-;3113:18;3167:27;3196:6;3156:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3146:58;;;;;;3113:91;;3235:48;3261:14;;3235:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3277:5:14;;3235:10;;:48;-1:-1:-1;;;;;;3277:5:14;;-1:-1:-1;3235:25:14;:48::i;:::-;3214:125;;;;-1:-1:-1;;;3214:125:14;;;;;;;:::i;:::-;3370:44;3396:12;;3370:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3410:3:14;;3370:10;;:44;-1:-1:-1;;;;;;3410:3:14;;-1:-1:-1;3370:25:14;:44::i;:::-;3349:119;;;;-1:-1:-1;;;3349:119:14;;;;;;;:::i;:::-;2939:536;;;;;;:::o;2268:455:11:-;2379:7;2664:52;2673:9;2684:31;2707:7;2684:22;:31::i;:::-;2664:8;:52::i;:::-;2657:59;2268:455;-1:-1:-1;;;2268:455:11:o;2729:311::-;2861:33;2878:7;2887:6;2861:16;:33::i;:::-;2925:57;2955:7;2964:9;2975:6;2925:29;:57::i;:::-;2904:129;;;;-1:-1:-1;;;2904:129:11;;;;;;;:::i;:::-;2729:311;;;:::o;382:54:17:-;307:1;418:4;:11;382:54::o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;548:229:33:-;686:4;757:13;-1:-1:-1;;;;;709:61:33;:44;737:4;743:9;709:27;:44::i;:::-;-1:-1:-1;;;;;709:61:33;;;548:229;-1:-1:-1;;;;548:229:33:o;763:223:32:-;826:7;864:16;872:7;864;:16::i;:::-;:115;;939:40;;-1:-1:-1;;;939:40:32;;-1:-1:-1;;;;;939:25:32;;;;;:40;;973:4;;939:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;864:115;;;899:21;864:115;845:134;763:223;-1:-1:-1;;763:223:32:o;391:104:4:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:4;;391:104;-1:-1:-1;391:104:4:o;1112:120:11:-;-1:-1:-1;;;;;1190:25:11;;;;;;;:16;:25;;;;;:35;;;;;;;1112:120::o;2263:307:32:-;2401:4;2436:16;2444:7;2436;:16::i;:::-;:127;;2522:41;2536:7;2545:9;2556:6;2522:13;:41::i;:::-;2436:127;;;2471:32;2485:9;2496:6;2471:13;:32::i;:::-;2417:146;2263:307;-1:-1:-1;;;;2263:307:32:o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:5;;;1746:187::o;783:246:33:-;905:7;928:14;945:28;968:4;945:22;:28::i;:::-;928:45;;990:32;1004:6;1012:9;990:13;:32::i;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1291:198::-;1414:4;1437:45;1455:7;1464:9;1475:6;1437:17;:45::i;992:293::-;1092:4;1113:12;1127:23;1166:9;-1:-1:-1;;;;;1166:14:32;1188:6;1166:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:87;;;;1209:48;1237:7;1246:10;1209:27;:48::i;:::-;-1:-1:-1;1274:4:32;;992:293;-1:-1:-1;;;;992:293:32:o;1035:303:33:-;1128:7;1325:4;1274:56;;;;;;;;:::i;1064:2068:2:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:2;;;;;;;:::i;1199:94::-;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:2;;;;;;;:::i;2642:154::-;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:2;;;;;;;:::i;2806:93::-;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:2;;-1:-1:-1;;3010:24:2;;;-1:-1:-1;;;;;;;3052:20:2;;3044:57;;;;-1:-1:-1;;;3044:57:2;;;;;;;:::i;:::-;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:2:o;1648:374:34:-;1766:4;1801:214;1827:7;1946:9;1977:6;1852:149;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1852:149:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1852:149:34;-1:-1:-1;;;1852:149:34;;;1801:8;:214::i;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;:::-;750:63;439:381;-1:-1:-1;;;;;439:381:34:o;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;444:336:-1:-;;;558:3;551:4;543:6;539:17;535:27;525:2;;-1:-1;;566:12;525:2;-1:-1;596:20;;636:18;625:30;;622:2;;;-1:-1;;658:12;622:2;702:4;694:6;690:17;678:29;;753:3;702:4;733:17;694:6;719:32;;716:41;713:2;;;770:1;;760:12;713:2;518:262;;;;;:::o;816:164::-;;932:3;923:6;918:3;914:16;910:26;907:2;;;-1:-1;;939:12;907:2;-1:-1;959:15;900:80;-1:-1;900:80::o;1265:241::-;;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;-1:-1;;1375:12;1337:2;85:6;72:20;97:33;124:5;97:33;:::i;1777:366::-;;;1898:2;1886:9;1877:7;1873:23;1869:32;1866:2;;;-1:-1;;1904:12;1866:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1956:63;-1:-1;2056:2;2095:22;;72:20;97:33;72:20;97:33;:::i;:::-;2064:63;;;;1860:283;;;;;:::o;2150:507::-;;;;2296:2;2284:9;2275:7;2271:23;2267:32;2264:2;;;-1:-1;;2302:12;2264:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2354:63;-1:-1;2454:2;2493:22;;72:20;97:33;72:20;97:33;:::i;:::-;2462:63;-1:-1;2562:2;2609:22;;217:20;242:41;217:20;242:41;:::i;:::-;2570:71;;;;2258:399;;;;;:::o;2664:257::-;;2776:2;2764:9;2755:7;2751:23;2747:32;2744:2;;;-1:-1;;2782:12;2744:2;376:6;370:13;31133:5;29352:13;29345:21;31111:5;31108:32;31098:2;;-1:-1;;31144:12;2928:391;;3064:2;3052:9;3043:7;3039:23;3035:32;3032:2;;;-1:-1;;3070:12;3032:2;3128:17;3115:31;3166:18;3158:6;3155:30;3152:2;;;-1:-1;;3188:12;3152:2;3218:85;3295:7;3286:6;3275:9;3271:22;3218:85;:::i;3326:889::-;;;;;;3534:2;3522:9;3513:7;3509:23;3505:32;3502:2;;;-1:-1;;3540:12;3502:2;3598:17;3585:31;3636:18;;3628:6;3625:30;3622:2;;;-1:-1;;3658:12;3622:2;3688:85;3765:7;3756:6;3745:9;3741:22;3688:85;:::i;:::-;3678:95;;3838:2;3827:9;3823:18;3810:32;3796:46;;3636:18;3854:6;3851:30;3848:2;;;-1:-1;;3884:12;3848:2;3922:64;3978:7;3969:6;3958:9;3954:22;3922:64;:::i;:::-;3904:82;;-1:-1;3904:82;-1:-1;4051:2;4036:18;;4023:32;;-1:-1;4064:30;;;4061:2;;;-1:-1;;4097:12;4061:2;;4135:64;4191:7;4182:6;4171:9;4167:22;4135:64;:::i;:::-;3496:719;;;;-1:-1;3496:719;;-1:-1;4117:82;;;3496:719;-1:-1;;;3496:719::o;4222:263::-;;4337:2;4325:9;4316:7;4312:23;4308:32;4305:2;;;-1:-1;;4343:12;4305:2;-1:-1;1202:13;;4299:186;-1:-1;4299:186::o;5269:277::-;;27637:6;27632:3;27625:19;30136:6;30131:3;27674:4;27669:3;27665:14;30113:30;-1:-1;27674:4;30183:6;27669:3;30174:16;;30167:27;27674:4;30650:7;;30654:2;5532:6;30634:14;30630:28;27669:3;5501:39;;5494:46;;5359:187;;;;;:::o;13313:1632::-;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;29670:54;;;4569:45;;28282:2;28273:12;;72:20;;97:33;72:20;97:33;:::i;:::-;29670:54;;;28282:2;13840:14;;4569:45;28273:12;;;72:20;;97:33;72:20;97:33;:::i;:::-;29681:42;29674:5;29670:54;28273:12;14054:3;14050:14;4569:45;14173:4;14166:5;14162:16;1054:20;14173:4;14237:3;14233:14;5038:37;14355:4;14348:5;14344:16;1054:20;14355:4;14419:3;14415:14;5038:37;14538:4;14531:5;14527:16;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;29670:54;14538:4;14598:14;;4569:45;14748:4;14737:16;;28556:17;28621:14;28617:29;;;-1:-1;;28613:48;28589:73;;28579:2;;-1:-1;;28666:12;28579:2;28695:33;;28750:19;;28820:18;28809:30;;28806:2;;;-1:-1;;28842:12;28806:2;28899:17;28621:14;28879:38;28869:8;28865:53;28862:2;;;-1:-1;;28921:12;28862:2;13476:4;14748;14778:3;14774:14;14767:38;14820:87;13476:4;13471:3;13467:14;14888:12;28282:2;28788:5;28784:16;14820:87;:::i;15296:271::-;;5714:5;27362:12;5825:52;5870:6;5865:3;5858:4;5851:5;5847:16;5825:52;:::i;:::-;5889:16;;;;;15430:137;-1:-1;;15430:137::o;15574:520::-;11185:66;11165:87;;11149:2;11271:12;;5038:37;;;;16057:12;;;15791:303::o;16101:379::-;16465:10;16289:191::o;16487:222::-;-1:-1;;;;;29670:54;;;;4569:45;;16614:2;16599:18;;16585:124::o;16716:333::-;-1:-1;;;;;29670:54;;;;4569:45;;17035:2;17020:18;;5038:37;16871:2;16856:18;;16842:207::o;17056:210::-;29352:13;;29345:21;4921:34;;17177:2;17162:18;;17148:118::o;17273:548::-;5038:37;;;29886:4;29875:16;;;;17641:2;17626:18;;15249:35;17724:2;17709:18;;5038:37;17807:2;17792:18;;5038:37;17480:3;17465:19;;17451:370::o;17828:367::-;18000:2;17985:18;;30759:1;30749:12;;30739:2;;30765:9;30739:2;6005:67;;;18181:2;18166:18;5038:37;17971:224;:::o;18202:310::-;;18349:2;18370:17;18363:47;6229:5;27362:12;27637:6;18349:2;18338:9;18334:18;27625:19;6323:52;6368:6;27665:14;18338:9;27665:14;18349:2;6349:5;6345:16;6323:52;:::i;:::-;30650:7;30634:14;-1:-1;;30630:28;6387:39;;;;27665:14;6387:39;;18320:192;-1:-1;;18320:192::o;18519:416::-;18719:2;18733:47;;;6663:2;18704:18;;;27625:19;6699:26;27665:14;;;6679:47;6745:12;;;18690:245::o;18942:416::-;19142:2;19156:47;;;6996:2;19127:18;;;27625:19;7032:31;27665:14;;;7012:52;7083:12;;;19113:245::o;19365:416::-;19565:2;19579:47;;;7334:2;19550:18;;;27625:19;-1:-1;;;27665:14;;;7350:41;7410:12;;;19536:245::o;19788:416::-;19988:2;20002:47;;;7661:2;19973:18;;;27625:19;7697:33;27665:14;;;7677:54;7750:12;;;19959:245::o;20211:416::-;20411:2;20425:47;;;8001:2;20396:18;;;27625:19;8037:33;27665:14;;;8017:54;8090:12;;;20382:245::o;20634:416::-;20834:2;20848:47;;;8341:2;20819:18;;;27625:19;8377:27;27665:14;;;8357:48;8424:12;;;20805:245::o;21057:416::-;21257:2;21271:47;;;8675:2;21242:18;;;27625:19;8711:34;27665:14;;;8691:55;-1:-1;;;8766:12;;;8759:26;8804:12;;;21228:245::o;21480:416::-;21680:2;21694:47;;;9055:2;21665:18;;;27625:19;9091:30;27665:14;;;9071:51;9141:12;;;21651:245::o;21903:416::-;22103:2;22117:47;;;9392:2;22088:18;;;27625:19;9428:30;27665:14;;;9408:51;9478:12;;;22074:245::o;22326:416::-;22526:2;22540:47;;;9729:2;22511:18;;;27625:19;9765:31;27665:14;;;9745:52;9816:12;;;22497:245::o;22749:416::-;22949:2;22963:47;;;10067:2;22934:18;;;27625:19;10103:34;27665:14;;;10083:55;-1:-1;;;10158:12;;;10151:26;10196:12;;;22920:245::o;23172:416::-;23372:2;23386:47;;;10447:2;23357:18;;;27625:19;-1:-1;;;27665:14;;;10463:40;10522:12;;;23343:245::o;23595:416::-;23795:2;23809:47;;;10773:2;23780:18;;;27625:19;10809:33;27665:14;;;10789:54;10862:12;;;23766:245::o;24018:416::-;24218:2;24232:47;;;11522:2;24203:18;;;27625:19;-1:-1;;;27665:14;;;11538:38;11595:12;;;24189:245::o;24441:416::-;24641:2;24655:47;;;11846:2;24626:18;;;27625:19;11882:32;27665:14;;;11862:53;11934:12;;;24612:245::o;24864:416::-;25064:2;25078:47;;;12185:2;25049:18;;;27625:19;12221:26;27665:14;;;12201:47;12267:12;;;25035:245::o;25287:416::-;25487:2;25501:47;;;12823:2;25472:18;;;27625:19;-1:-1;;;27665:14;;;12839:45;12903:12;;;25458:245::o;25710:416::-;25910:2;25924:47;;;13154:2;25895:18;;;27625:19;13190:28;27665:14;;;13170:49;13238:12;;;25881:245::o;26133:394::-;;26322:2;26343:17;26336:47;26397:120;26322:2;26311:9;26307:18;26503:6;26397:120;:::i;26534:505::-;;26751:2;26772:17;26765:47;26826:120;26751:2;26740:9;26736:18;26932:6;26826:120;:::i;:::-;26818:128;;5068:5;27025:2;27014:9;27010:18;5038:37;26722:317;;;;;:::o;27046:222::-;5038:37;;;27173:2;27158:18;;27144:124::o;30209:268::-;30274:1;30281:101;30295:6;30292:1;30289:13;30281:101;;;30362:11;;;30356:18;30343:11;;;30336:39;30317:2;30310:10;30281:101;;;30397:6;30394:1;30391:13;30388:2;;;30274:1;30453:6;30448:3;30444:16;30437:27;30388:2;;30258:219;;;:::o;30788:117::-;-1:-1;;;;;29670:54;;30847:35;;30837:2;;30896:1;;30886:12;30837:2;30831:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1206400",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "exit(address,address,address)": "infinite",
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "getExitableAmount(address,address)": "infinite",
                "getTotalTransferred(address)": "infinite",
                "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "infinite",
                "lock()": "1116",
                "setup(address,address)": "infinite",
                "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "infinite"
              },
              "internal": {
                "hashWithdrawData(struct WithdrawData calldata)": "infinite",
                "verifySignaturesOnWithdrawDataHash(bytes32,bytes calldata,bytes calldata)": "infinite"
              }
            },
            "methodIdentifiers": {
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalTransferred(address)": "cefa5122",
              "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "8c048fc2",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79",
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "2c889aa1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"}],\"name\":\"getWithdrawalTransactionRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}},\"withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)\":{\"params\":{\"aliceSignature\":\"Signature of owner a\",\"bobSignature\":\"Signature of owner b\",\"wd\":\"The withdraw data consisting of semantic withdraw information, i.e. assetId, recipient, and amount; information to make an optional call in addition to the actual transfer, i.e. target address for the call and call payload; additional information, i.e. channel address and nonce.\"}}},\"title\":\"CMCWithdraw\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"Contains logic for all cooperative channel multisig withdrawals.         Cooperative withdrawal commitments must be signed by both channel         participants. As part of the channel withdrawals, an arbitrary         call can be made, which is extracted from the withdraw data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/CMCWithdraw.sol\":\"CMCWithdraw\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/CMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCAsset.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/Math.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title CMCAsset\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic to safely transfer channel assets (even if they are\\n///         noncompliant). During adjudication, balances from defunding the\\n///         channel or defunding transfers are registered as withdrawable. Once\\n///         they are registered, the owner (or a watchtower on behalf of the\\n///         owner), may call `exit` to reclaim funds from the multisig.\\n\\ncontract CMCAsset is CMCCore, ICMCAsset {\\n    using SafeMath for uint256;\\n    using LibMath for uint256;\\n\\n    mapping(address => uint256) internal totalTransferred;\\n    mapping(address => mapping(address => uint256))\\n        private exitableAmount;\\n\\n    function registerTransfer(address assetId, uint256 amount) internal {\\n        totalTransferred[assetId] += amount;\\n    }\\n\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return totalTransferred[assetId];\\n    }\\n\\n    function makeExitable(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal {\\n        exitableAmount[assetId][\\n            recipient\\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\\n    }\\n\\n    function makeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) internal {\\n        for (uint256 i = 0; i < 2; i++) {\\n            uint256 amount = balance.amount[i];\\n            if (amount > 0) {\\n                makeExitable(assetId, balance.to[i], amount);\\n            }\\n        }\\n    }\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return exitableAmount[assetId][owner];\\n    }\\n\\n    function getAvailableAmount(address assetId, uint256 maxAmount)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        // Taking the min protects against the case where the multisig\\n        // holds less than the amount that is trying to be withdrawn\\n        // while still allowing the total of the funds to be removed\\n        // without the transaction reverting.\\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\\n    }\\n\\n    function transferAsset(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal {\\n        registerTransfer(assetId, amount);\\n        require(\\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\\n            \\\"CMCAsset: TRANSFER_FAILED\\\"\\n        );\\n    }\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external override onlyViaProxy nonReentrant {\\n        // Either the owner must be the recipient, or in control\\n        // of setting the recipient of the funds to whomever they\\n        // choose\\n        require(\\n            msg.sender == owner || owner == recipient,\\n            \\\"CMCAsset: OWNER_MISMATCH\\\"\\n        );\\n\\n        uint256 amount =\\n            getAvailableAmount(\\n                assetId,\\n                exitableAmount[assetId][owner]\\n            );\\n\\n        // Revert if amount is 0\\n        require(amount > 0, \\\"CMCAsset: NO_OP\\\");\\n\\n        // Reduce the amount claimable from the multisig by the owner\\n        exitableAmount[assetId][\\n            owner\\n        ] = exitableAmount[assetId][owner].sub(amount);\\n\\n        // Perform transfer\\n        transferAsset(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x39c1bd81d8ec2a0fa7c23aad683017f5e2ec28a2db43643020649f935b5b74bf\",\"license\":\"UNLICENSED\"},\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/CMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/Commitment.sol\\\";\\nimport \\\"./interfaces/ICMCWithdraw.sol\\\";\\nimport \\\"./interfaces/WithdrawHelper.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibChannelCrypto.sol\\\";\\nimport \\\"./lib/LibUtils.sol\\\";\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic for all cooperative channel multisig withdrawals.\\n///         Cooperative withdrawal commitments must be signed by both channel\\n///         participants. As part of the channel withdrawals, an arbitrary\\n///         call can be made, which is extracted from the withdraw data.\\n\\ncontract CMCWithdraw is CMCCore, CMCAsset, ICMCWithdraw {\\n    using LibChannelCrypto for bytes32;\\n\\n    mapping(bytes32 => bool) private isExecuted;\\n\\n    modifier validateWithdrawData(WithdrawData calldata wd) {\\n        require(\\n            wd.channelAddress == address(this),\\n            \\\"CMCWithdraw: CHANNEL_MISMATCH\\\"\\n        );\\n        _;\\n    }\\n\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (bool)\\n    {\\n        return isExecuted[hashWithdrawData(wd)];\\n    }\\n\\n    /// @param wd The withdraw data consisting of\\n    /// semantic withdraw information, i.e. assetId, recipient, and amount;\\n    /// information to make an optional call in addition to the actual transfer,\\n    /// i.e. target address for the call and call payload;\\n    /// additional information, i.e. channel address and nonce.\\n    /// @param aliceSignature Signature of owner a\\n    /// @param bobSignature Signature of owner b\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external override onlyViaProxy nonReentrant validateWithdrawData(wd) {\\n        // Generate hash\\n        bytes32 wdHash = hashWithdrawData(wd);\\n\\n        // Verify Alice's and Bob's signature on the withdraw data\\n        verifySignaturesOnWithdrawDataHash(wdHash, aliceSignature, bobSignature);\\n\\n        // Replay protection\\n        require(!isExecuted[wdHash], \\\"CMCWithdraw: ALREADY_EXECUTED\\\");\\n        isExecuted[wdHash] = true;\\n\\n        // Determine actually transferable amount\\n        uint256 actualAmount = getAvailableAmount(wd.assetId, wd.amount);\\n\\n        // Revert if actualAmount is zero && callTo is 0\\n        require(\\n            actualAmount > 0 || wd.callTo != address(0),\\n            \\\"CMCWithdraw: NO_OP\\\"\\n        );\\n\\n        // Register and execute the transfer\\n        transferAsset(wd.assetId, wd.recipient, actualAmount);\\n\\n        // Do we have to make a call in addition to the actual transfer?\\n        if (wd.callTo != address(0)) {\\n            WithdrawHelper(wd.callTo).execute(wd, actualAmount);\\n        }\\n    }\\n\\n    function verifySignaturesOnWithdrawDataHash(\\n        bytes32 wdHash,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) internal view {\\n        bytes32 commitment =\\n            keccak256(abi.encode(CommitmentType.WithdrawData, wdHash));\\n        require(\\n            commitment.checkSignature(aliceSignature, alice),\\n            \\\"CMCWithdraw: INVALID_ALICE_SIG\\\"\\n        );\\n        require(\\n            commitment.checkSignature(bobSignature, bob),\\n            \\\"CMCWithdraw: INVALID_BOB_SIG\\\"\\n        );\\n    }\\n\\n    function hashWithdrawData(WithdrawData calldata wd)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(wd));\\n    }\\n}\\n\",\"keccak256\":\"0x7fde93a55cab8b4a9497471af1f8321a6d9463a93c3c6b11cf6d5ada26326beb\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Commitment.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nenum CommitmentType {ChannelState, WithdrawData}\\n\",\"keccak256\":\"0xabfb62d2dbe45e307fc08742f87d2ff5d6faa9ab065f0c2395dc4adcbe0a9c20\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/WithdrawHelper.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCWithdraw.sol\\\";\\n\\ninterface WithdrawHelper {\\n    function execute(WithdrawData calldata wd, uint256 actualAmount) external;\\n}\\n\",\"keccak256\":\"0x45bd70363bc7a45001589d55d8d068a3baa321c50382c0c73f1ffae45adfc4bb\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibChannelCrypto.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/cryptography/ECDSA.sol\\\";\\n\\t\\t\\n/// @author Connext <support@connext.network>\\t\\t\\n/// @notice This library contains helpers for recovering signatures from a\\t\\t\\n///         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t\\n///         messages to prevent misuse of private keys by injected providers,\\t\\t\\n///         and instead only sign messages with a Vector channel prefix.\\nlibrary LibChannelCrypto {\\n    function checkSignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toChannelSignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toChannelSignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x16Vector Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    function checkUtilitySignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toUtilitySignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toUtilitySignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x17Utility Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xb8aa3679b75f2a1a5785f614f5dff9a76a689c18caa56a8df1f4e3c3167d6ece\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/CMCWithdraw.sol:CMCWithdraw",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/CMCWithdraw.sol:CMCWithdraw",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/CMCWithdraw.sol:CMCWithdraw",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              },
              {
                "astId": 2348,
                "contract": "src.sol/CMCWithdraw.sol:CMCWithdraw",
                "label": "totalTransferred",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2354,
                "contract": "src.sol/CMCWithdraw.sol:CMCWithdraw",
                "label": "exitableAmount",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 2895,
                "contract": "src.sol/CMCWithdraw.sol:CMCWithdraw",
                "label": "isExecuted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_bytes32,t_bool)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_bool)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "Contains logic for all cooperative channel multisig withdrawals.         Cooperative withdrawal commitments must be signed by both channel         participants. As part of the channel withdrawals, an arbitrary         call can be made, which is extracted from the withdraw data.",
            "version": 1
          }
        }
      },
      "src.sol/ChannelFactory.sol": {
        "ChannelFactory": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_mastercopy",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_chainId",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "name": "ChannelCreation",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "createChannel",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "createChannelAndDepositAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChainId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_chainId",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "getChannelAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getMastercopy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getProxyCreationCode",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getStoredChainId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "constructor": {
                "details": "Creates a new `ChannelFactory`",
                "params": {
                  "_chainId": "the chain identifier when generating the CREATE2 salt. If zero, the chain identifier used in the proxy salt will be the result of the opcode",
                  "_mastercopy": "the address of the `ChannelMastercopy` (channel logic)"
                }
              },
              "createChannel(address,address)": {
                "details": "Allows us to create new channel contract and get it all set up in one transaction",
                "params": {
                  "alice": "address of the high fidelity channel participant",
                  "bob": "address of the other channel participant"
                }
              },
              "createChannelAndDepositAlice(address,address,address,uint256)": {
                "details": "Allows us to create a new channel contract and fund it in one transaction",
                "params": {
                  "bob": "address of the other channel participant"
                }
              },
              "getChainId()": {
                "details": "Allows us to get the chainId that this factory will use in the create2 salt"
              },
              "getChannelAddress(address,address)": {
                "details": "Allows us to get the address for a new channel contract created via `createChannel`",
                "params": {
                  "alice": "address of the igh fidelity channel participant",
                  "bob": "address of the other channel participant"
                }
              },
              "getMastercopy()": {
                "details": "Allows us to get the mastercopy that this factory will deploy channels against"
              },
              "getProxyCreationCode()": {
                "details": "Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`"
              },
              "getStoredChainId()": {
                "details": "Allows us to get the chainId that this factory has stored"
              }
            },
            "title": "ChannelFactory",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60c060405234801561001057600080fd5b50604051610c8f380380610c8f83398101604081905261002f916100eb565b6001600160601b0319606083901b1660805260a081905261004f82610062565b8051602090910120600055506101909050565b60606040518060400160405280601481526020017f3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000815250826040518060400160405280600f81526020016e5af43d82803e903d91602b57fd5bf360881b8152506040516020016100d59392919061015c565b6040516020818303038152906040529050919050565b600080604083850312156100fd578182fd5b82516001600160a01b0381168114610113578283fd5b6020939093015192949293505050565b60008151815b818110156101435760208185018101518683015201610129565b818111156101515782828601525b509290920192915050565b60006101688286610123565b606085901b6001600160601b03191681526101866014820185610123565b9695505050505050565b60805160601c60a051610acf6101c06000398061017e52806101a452508061015352806102a65250610acf6000f3fe6080604052600436106100705760003560e01c806335a1ba6f1161004e57806335a1ba6f146100d7578063e617aaac14610104578063efe4369314610124578063fe4545011461013957610070565b806315727e911461007557806332a130c9146100a05780633408e470146100c2575b600080fd5b34801561008157600080fd5b5061008a61014c565b60405161009791906108d6565b60405180910390f35b3480156100ac57600080fd5b506100b561017c565b6040516100979190610a60565b3480156100ce57600080fd5b506100b56101a0565b3480156100e357600080fd5b506100f76100f2366004610703565b6101d8565b604051610097919061086b565b34801561011057600080fd5b506100f761011f366004610703565b610284565b34801561013057600080fd5b506100f76102a4565b6100f7610147366004610737565b6102c8565b60606101777f00000000000000000000000000000000000000000000000000000000000000006103a5565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000806101d0574691506101d4565b8091505b5090565b60006101e48383610425565b604051632d34ba7960e01b81529091506001600160a01b03821690632d34ba7990610215908690869060040161087f565b600060405180830381600087803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b505050507fa79ba8cc5fdc29196c8d65701a02433c92328f38f0ffbea3908335b80d81409d81604051610276919061086b565b60405180910390a192915050565b600061029b610293848461044f565b60005461048b565b90505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006102d485856101d8565b90506102df83610498565b61033b576102ef833330856104a5565b6103145760405162461bcd60e51b815260040161030b906109e4565b60405180910390fd5b61031f8382846104f8565b61033b5760405162461bcd60e51b815260040161030b906109a0565b60405163635ae90160e01b81526001600160a01b0382169063635ae90190349061036b90879087906004016108bd565b6000604051808303818588803b15801561038457600080fd5b505af1158015610398573d6000803e3d6000fd5b5050505050949350505050565b6060604051806040016040528060148152602001733d602d80600a3d3981f3363d3d373d3d3d363d7360601b815250826040518060400160405280600f81526020016e5af43d82803e903d91602b57fd5bf360881b81525060405160200161040f93929190610824565b6040516020818303038152906040529050919050565b600080610432848461044f565b905061044760008261044261014c565b610540565b949350505050565b6000828261045b6101a0565b60405160200161046d939291906107ab565b60405160208183030381529060405280519060200120905092915050565b600061029b8383306105b2565b6001600160a01b03161590565b60006104ef858585856040516024016104c093929190610899565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790526105f1565b95945050505050565b60006104478484846040516024016105119291906108bd565b60408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b1790526105f1565b600080844710156105635760405162461bcd60e51b815260040161030b90610a29565b82516105815760405162461bcd60e51b815260040161030b90610909565b8383516020850187f590506001600160a01b0381166104475760405162461bcd60e51b815260040161030b9061093e565b60008060ff60f81b8386866040516020016105d094939291906107d4565b60408051808303601f19018152919052805160209091012095945050505050565b60006105fc836106a2565b6106185760405162461bcd60e51b815260040161030b90610975565b60006060846001600160a01b0316846040516106349190610808565b6000604051808303816000865af19150503d8060008114610671576040519150601f19603f3d011682016040523d82523d6000602084013e610676565b606091505b509150915061068582826106db565b805115806104ef5750808060200190518101906104ef9190610784565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610447575050151592915050565b816106e857805160208201fd5b5050565b80356001600160a01b038116811461029e57600080fd5b60008060408385031215610715578182fd5b61071f84846106ec565b915061072e84602085016106ec565b90509250929050565b6000806000806080858703121561074c578182fd5b61075686866106ec565b935061076586602087016106ec565b925061077486604087016106ec565b9396929550929360600135925050565b600060208284031215610795578081fd5b815180151581146107a4578182fd5b9392505050565b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b6001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b6000825161081a818460208701610a69565b9190910192915050565b60008451610836818460208901610a69565b606085901b6001600160601b031916908301908152835161085e816014840160208801610a69565b0160140195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b60006020825282518060208401526108f5816040850160208701610a69565b601f01601f19169190910160400192915050565b6020808252818101527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604082015260600190565b60208082526019908201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604082015260600190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b60208082526024908201527f4368616e6e656c466163746f72793a2045524332305f415050524f56455f46416040820152631253115160e21b606082015260800190565b60208082526025908201527f4368616e6e656c466163746f72793a2045524332305f5452414e534645525f46604082015264105253115160da1b606082015260800190565b6020808252601d908201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604082015260600190565b90815260200190565b60005b83811015610a84578181015183820152602001610a6c565b83811115610a93576000848401525b5050505056fea26469706673582212206b46714e4e157ca4fcef5f14f882cae62cdcfb5e301602c8361ab37a1daaf2ab64736f6c63430007010033",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xC8F CODESIZE SUB DUP1 PUSH2 0xC8F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP4 SWAP1 SHL AND PUSH1 0x80 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH2 0x4F DUP3 PUSH2 0x62 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x0 SSTORE POP PUSH2 0x190 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xD5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x113 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x143 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD MSTORE ADD PUSH2 0x129 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x151 JUMPI DUP3 DUP3 DUP7 ADD MSTORE JUMPDEST POP SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x168 DUP3 DUP7 PUSH2 0x123 JUMP JUMPDEST PUSH1 0x60 DUP6 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP2 MSTORE PUSH2 0x186 PUSH1 0x14 DUP3 ADD DUP6 PUSH2 0x123 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH2 0xACF PUSH2 0x1C0 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x17E MSTORE DUP1 PUSH2 0x1A4 MSTORE POP DUP1 PUSH2 0x153 MSTORE DUP1 PUSH2 0x2A6 MSTORE POP PUSH2 0xACF PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x70 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x35A1BA6F GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x35A1BA6F EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0xE617AAAC EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0xEFE43693 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xFE454501 EQ PUSH2 0x139 JUMPI PUSH2 0x70 JUMP JUMPDEST DUP1 PUSH4 0x15727E91 EQ PUSH2 0x75 JUMPI DUP1 PUSH4 0x32A130C9 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0xC2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8A PUSH2 0x14C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x8D6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB5 PUSH2 0x17C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xA60 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB5 PUSH2 0x1A0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0xF2 CALLDATASIZE PUSH1 0x4 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x1D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x86B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x284 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x147 CALLDATASIZE PUSH1 0x4 PUSH2 0x737 JUMP JUMPDEST PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x177 PUSH32 0x0 PUSH2 0x3A5 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 PUSH2 0x1D0 JUMPI CHAINID SWAP2 POP PUSH2 0x1D4 JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E4 DUP4 DUP4 PUSH2 0x425 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D34BA79 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x2D34BA79 SWAP1 PUSH2 0x215 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x87F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x243 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xA79BA8CC5FDC29196C8D65701A02433C92328F38F0FFBEA3908335B80D81409D DUP2 PUSH1 0x40 MLOAD PUSH2 0x276 SWAP2 SWAP1 PUSH2 0x86B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29B PUSH2 0x293 DUP5 DUP5 PUSH2 0x44F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x48B JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D4 DUP6 DUP6 PUSH2 0x1D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x2DF DUP4 PUSH2 0x498 JUMP JUMPDEST PUSH2 0x33B JUMPI PUSH2 0x2EF DUP4 CALLER ADDRESS DUP6 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x9E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x31F DUP4 DUP3 DUP5 PUSH2 0x4F8 JUMP JUMPDEST PUSH2 0x33B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x9A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x635AE901 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x635AE901 SWAP1 CALLVALUE SWAP1 PUSH2 0x36B SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x398 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH20 0x3D602D80600A3D3981F3363D3D373D3D3D363D73 PUSH1 0x60 SHL DUP2 MSTORE POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x40F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x824 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x432 DUP5 DUP5 PUSH2 0x44F JUMP JUMPDEST SWAP1 POP PUSH2 0x447 PUSH1 0x0 DUP3 PUSH2 0x442 PUSH2 0x14C JUMP JUMPDEST PUSH2 0x540 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH2 0x45B PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x46D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x7AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29B DUP4 DUP4 ADDRESS PUSH2 0x5B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EF DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x4C0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x899 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x5F1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x447 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x511 SWAP3 SWAP2 SWAP1 PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x5F1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SELFBALANCE LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0xA29 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x581 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x909 JUMP JUMPDEST DUP4 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP8 CREATE2 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x447 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x93E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xFF PUSH1 0xF8 SHL DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5D0 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FC DUP4 PUSH2 0x6A2 JUMP JUMPDEST PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x975 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x634 SWAP2 SWAP1 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x671 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x676 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x685 DUP3 DUP3 PUSH2 0x6DB JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x4EF JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x4EF SWAP2 SWAP1 PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x447 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x6E8 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x715 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x71F DUP5 DUP5 PUSH2 0x6EC JUMP JUMPDEST SWAP2 POP PUSH2 0x72E DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x6EC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x74C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x756 DUP7 DUP7 PUSH2 0x6EC JUMP JUMPDEST SWAP4 POP PUSH2 0x765 DUP7 PUSH1 0x20 DUP8 ADD PUSH2 0x6EC JUMP JUMPDEST SWAP3 POP PUSH2 0x774 DUP7 PUSH1 0x40 DUP8 ADD PUSH2 0x6EC JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x795 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x7A4 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND DUP3 MSTORE SWAP3 SWAP1 SWAP4 SHL SWAP1 SWAP2 AND PUSH1 0x14 DUP4 ADD MSTORE PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x48 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT SWAP5 SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x60 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 DUP5 ADD MSTORE PUSH1 0x15 DUP4 ADD MSTORE PUSH1 0x35 DUP3 ADD MSTORE PUSH1 0x55 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x81A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xA69 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x836 DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0xA69 JUMP JUMPDEST PUSH1 0x60 DUP6 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND SWAP1 DUP4 ADD SWAP1 DUP2 MSTORE DUP4 MLOAD PUSH2 0x85E DUP2 PUSH1 0x14 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xA69 JUMP JUMPDEST ADD PUSH1 0x14 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x8F5 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xA69 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x437265617465323A2062797465636F6465206C656E677468206973207A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A204661696C6564206F6E206465706C6F7900000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F415050524F56455F4641 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x12531151 PUSH1 0xE2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F5452414E534645525F46 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1052531151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA84 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA6C JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xA93 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0x46714E4E157CA4FCEF5F14F8 DUP3 0xCA 0xE6 0x2C 0xDC 0xFB 0x5E ADDRESS AND MUL 0xC8 CALLDATASIZE BYTE 0xB3 PUSH27 0x1DAAF2AB64736F6C63430007010033000000000000000000000000 ",
              "sourceMap": "428:5364:15:-:0;;;1146:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1207:24:15;;;;;;;1241:18;;;;1298:34;1220:11;1298:21;:34::i;:::-;1288:45;;;;;;;1269:16;:64;-1:-1:-1;428:5364:15;;-1:-1:-1;428:5364:15;4816:252;4891:12;4954:23;;;;;;;;;;;;;;;;;4995:11;5024:23;;;;;;;;;;;;;-1:-1:-1;;;5024:23:15;;;4920:141;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4913:148;;4816:252;;;:::o;287:399:-1:-;;;419:2;407:9;398:7;394:23;390:32;387:2;;;-1:-1;;425:12;387:2;83:13;;-1:-1;;;;;2230:54;;3011:35;;3001:2;;-1:-1;;3050:12;3001:2;588;638:22;;;;224:13;477:74;;224:13;;-1:-1;;;381:305::o;852:356::-;;1012:5;1876:12;-1:-1;2448:101;2462:6;2459:1;2456:13;2448:101;;;1156:4;2529:11;;;;;2523:18;2510:11;;;2503:39;2477:10;2448:101;;;2564:6;2561:1;2558:13;2555:2;;;-1:-1;2620:6;2615:3;2611:16;2604:27;2555:2;-1:-1;1187:16;;;;;960:248;-1:-1;;960:248::o;1215:567::-;;1442:93;1531:3;1522:6;1442:93;:::i;:::-;2920:14;;;;-1:-1;;;;;;2920:14;782:58;;1664:93;1643:2;1634:12;;1744:6;1664:93;:::i;:::-;1767:10;1423:359;-1:-1;;;;;;1423:359::o;:::-;428:5364:15;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "3102": [
                  {
                    "length": 32,
                    "start": 339
                  },
                  {
                    "length": 32,
                    "start": 678
                  }
                ],
                "3104": [
                  {
                    "length": 32,
                    "start": 382
                  },
                  {
                    "length": 32,
                    "start": 420
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106100705760003560e01c806335a1ba6f1161004e57806335a1ba6f146100d7578063e617aaac14610104578063efe4369314610124578063fe4545011461013957610070565b806315727e911461007557806332a130c9146100a05780633408e470146100c2575b600080fd5b34801561008157600080fd5b5061008a61014c565b60405161009791906108d6565b60405180910390f35b3480156100ac57600080fd5b506100b561017c565b6040516100979190610a60565b3480156100ce57600080fd5b506100b56101a0565b3480156100e357600080fd5b506100f76100f2366004610703565b6101d8565b604051610097919061086b565b34801561011057600080fd5b506100f761011f366004610703565b610284565b34801561013057600080fd5b506100f76102a4565b6100f7610147366004610737565b6102c8565b60606101777f00000000000000000000000000000000000000000000000000000000000000006103a5565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000806101d0574691506101d4565b8091505b5090565b60006101e48383610425565b604051632d34ba7960e01b81529091506001600160a01b03821690632d34ba7990610215908690869060040161087f565b600060405180830381600087803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b505050507fa79ba8cc5fdc29196c8d65701a02433c92328f38f0ffbea3908335b80d81409d81604051610276919061086b565b60405180910390a192915050565b600061029b610293848461044f565b60005461048b565b90505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006102d485856101d8565b90506102df83610498565b61033b576102ef833330856104a5565b6103145760405162461bcd60e51b815260040161030b906109e4565b60405180910390fd5b61031f8382846104f8565b61033b5760405162461bcd60e51b815260040161030b906109a0565b60405163635ae90160e01b81526001600160a01b0382169063635ae90190349061036b90879087906004016108bd565b6000604051808303818588803b15801561038457600080fd5b505af1158015610398573d6000803e3d6000fd5b5050505050949350505050565b6060604051806040016040528060148152602001733d602d80600a3d3981f3363d3d373d3d3d363d7360601b815250826040518060400160405280600f81526020016e5af43d82803e903d91602b57fd5bf360881b81525060405160200161040f93929190610824565b6040516020818303038152906040529050919050565b600080610432848461044f565b905061044760008261044261014c565b610540565b949350505050565b6000828261045b6101a0565b60405160200161046d939291906107ab565b60405160208183030381529060405280519060200120905092915050565b600061029b8383306105b2565b6001600160a01b03161590565b60006104ef858585856040516024016104c093929190610899565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790526105f1565b95945050505050565b60006104478484846040516024016105119291906108bd565b60408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b1790526105f1565b600080844710156105635760405162461bcd60e51b815260040161030b90610a29565b82516105815760405162461bcd60e51b815260040161030b90610909565b8383516020850187f590506001600160a01b0381166104475760405162461bcd60e51b815260040161030b9061093e565b60008060ff60f81b8386866040516020016105d094939291906107d4565b60408051808303601f19018152919052805160209091012095945050505050565b60006105fc836106a2565b6106185760405162461bcd60e51b815260040161030b90610975565b60006060846001600160a01b0316846040516106349190610808565b6000604051808303816000865af19150503d8060008114610671576040519150601f19603f3d011682016040523d82523d6000602084013e610676565b606091505b509150915061068582826106db565b805115806104ef5750808060200190518101906104ef9190610784565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610447575050151592915050565b816106e857805160208201fd5b5050565b80356001600160a01b038116811461029e57600080fd5b60008060408385031215610715578182fd5b61071f84846106ec565b915061072e84602085016106ec565b90509250929050565b6000806000806080858703121561074c578182fd5b61075686866106ec565b935061076586602087016106ec565b925061077486604087016106ec565b9396929550929360600135925050565b600060208284031215610795578081fd5b815180151581146107a4578182fd5b9392505050565b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b6001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b6000825161081a818460208701610a69565b9190910192915050565b60008451610836818460208901610a69565b606085901b6001600160601b031916908301908152835161085e816014840160208801610a69565b0160140195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b60006020825282518060208401526108f5816040850160208701610a69565b601f01601f19169190910160400192915050565b6020808252818101527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604082015260600190565b60208082526019908201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604082015260600190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b60208082526024908201527f4368616e6e656c466163746f72793a2045524332305f415050524f56455f46416040820152631253115160e21b606082015260800190565b60208082526025908201527f4368616e6e656c466163746f72793a2045524332305f5452414e534645525f46604082015264105253115160da1b606082015260800190565b6020808252601d908201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604082015260600190565b90815260200190565b60005b83811015610a84578181015183820152602001610a6c565b83811115610a93576000848401525b5050505056fea26469706673582212206b46714e4e157ca4fcef5f14f882cae62cdcfb5e301602c8361ab37a1daaf2ab64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x70 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x35A1BA6F GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x35A1BA6F EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0xE617AAAC EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0xEFE43693 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xFE454501 EQ PUSH2 0x139 JUMPI PUSH2 0x70 JUMP JUMPDEST DUP1 PUSH4 0x15727E91 EQ PUSH2 0x75 JUMPI DUP1 PUSH4 0x32A130C9 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0xC2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8A PUSH2 0x14C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x8D6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB5 PUSH2 0x17C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xA60 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB5 PUSH2 0x1A0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0xF2 CALLDATASIZE PUSH1 0x4 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x1D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x86B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x284 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x147 CALLDATASIZE PUSH1 0x4 PUSH2 0x737 JUMP JUMPDEST PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x177 PUSH32 0x0 PUSH2 0x3A5 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 PUSH2 0x1D0 JUMPI CHAINID SWAP2 POP PUSH2 0x1D4 JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E4 DUP4 DUP4 PUSH2 0x425 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D34BA79 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x2D34BA79 SWAP1 PUSH2 0x215 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x87F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x243 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xA79BA8CC5FDC29196C8D65701A02433C92328F38F0FFBEA3908335B80D81409D DUP2 PUSH1 0x40 MLOAD PUSH2 0x276 SWAP2 SWAP1 PUSH2 0x86B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29B PUSH2 0x293 DUP5 DUP5 PUSH2 0x44F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x48B JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D4 DUP6 DUP6 PUSH2 0x1D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x2DF DUP4 PUSH2 0x498 JUMP JUMPDEST PUSH2 0x33B JUMPI PUSH2 0x2EF DUP4 CALLER ADDRESS DUP6 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x9E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x31F DUP4 DUP3 DUP5 PUSH2 0x4F8 JUMP JUMPDEST PUSH2 0x33B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x9A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x635AE901 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x635AE901 SWAP1 CALLVALUE SWAP1 PUSH2 0x36B SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x398 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH20 0x3D602D80600A3D3981F3363D3D373D3D3D363D73 PUSH1 0x60 SHL DUP2 MSTORE POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x40F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x824 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x432 DUP5 DUP5 PUSH2 0x44F JUMP JUMPDEST SWAP1 POP PUSH2 0x447 PUSH1 0x0 DUP3 PUSH2 0x442 PUSH2 0x14C JUMP JUMPDEST PUSH2 0x540 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH2 0x45B PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x46D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x7AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29B DUP4 DUP4 ADDRESS PUSH2 0x5B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EF DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x4C0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x899 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x5F1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x447 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x511 SWAP3 SWAP2 SWAP1 PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x5F1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SELFBALANCE LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0xA29 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x581 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x909 JUMP JUMPDEST DUP4 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP8 CREATE2 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x447 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x93E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xFF PUSH1 0xF8 SHL DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5D0 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FC DUP4 PUSH2 0x6A2 JUMP JUMPDEST PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30B SWAP1 PUSH2 0x975 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x634 SWAP2 SWAP1 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x671 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x676 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x685 DUP3 DUP3 PUSH2 0x6DB JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x4EF JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x4EF SWAP2 SWAP1 PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x447 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x6E8 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x715 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x71F DUP5 DUP5 PUSH2 0x6EC JUMP JUMPDEST SWAP2 POP PUSH2 0x72E DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x6EC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x74C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x756 DUP7 DUP7 PUSH2 0x6EC JUMP JUMPDEST SWAP4 POP PUSH2 0x765 DUP7 PUSH1 0x20 DUP8 ADD PUSH2 0x6EC JUMP JUMPDEST SWAP3 POP PUSH2 0x774 DUP7 PUSH1 0x40 DUP8 ADD PUSH2 0x6EC JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x795 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x7A4 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND DUP3 MSTORE SWAP3 SWAP1 SWAP4 SHL SWAP1 SWAP2 AND PUSH1 0x14 DUP4 ADD MSTORE PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x48 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT SWAP5 SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x60 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 DUP5 ADD MSTORE PUSH1 0x15 DUP4 ADD MSTORE PUSH1 0x35 DUP3 ADD MSTORE PUSH1 0x55 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x81A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xA69 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x836 DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0xA69 JUMP JUMPDEST PUSH1 0x60 DUP6 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND SWAP1 DUP4 ADD SWAP1 DUP2 MSTORE DUP4 MLOAD PUSH2 0x85E DUP2 PUSH1 0x14 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xA69 JUMP JUMPDEST ADD PUSH1 0x14 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x8F5 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xA69 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x437265617465323A2062797465636F6465206C656E677468206973207A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A204661696C6564206F6E206465706C6F7900000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F415050524F56455F4641 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x12531151 PUSH1 0xE2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F5452414E534645525F46 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1052531151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA84 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA6C JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xA93 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0x46714E4E157CA4FCEF5F14F8 DUP3 0xCA 0xE6 0x2C 0xDC 0xFB 0x5E ADDRESS AND MUL 0xC8 CALLDATASIZE BYTE 0xB3 PUSH27 0x1DAAF2AB64736F6C63430007010033000000000000000000000000 ",
              "sourceMap": "428:5364:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:169;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2094:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1701:316::-;;;;;;;;;;;;;:::i;3255:268::-;;;;;;;;;;-1:-1:-1;3255:268:15;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2744:280::-;;;;;;;;;;-1:-1:-1;2744:280:15;;;;;:::i;:::-;;:::i;1506:100::-;;;;;;;;;;;;;:::i;3676:1064::-;;;;;;:::i;:::-;;:::i;2343:169::-;2437:12;2472:33;2494:10;2472:21;:33::i;:::-;2465:40;;2343:169;:::o;2094:100::-;2180:7;2094:100;:::o;1701:316::-;1753:16;1845:7;1866:10;1862:149;;1931:9;1919:21;;1901:53;;;1995:5;1984:16;;1862:149;1701:316;;:::o;3255:268::-;3355:15;3396:30;3415:5;3422:3;3396:18;:30::i;:::-;3436:41;;-1:-1:-1;;;3436:41:15;;3386:40;;-1:-1:-1;;;;;;3436:29:15;;;;;:41;;3466:5;;3473:3;;3436:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3492:24;3508:7;3492:24;;;;;;:::i;:::-;;;;;;;;3255:268;;;;:::o;2744:280::-;2863:7;2905:112;2945:24;2958:5;2965:3;2945:12;:24::i;:::-;2987:16;;2905:22;:112::i;:::-;2886:131;;2744:280;;;;;:::o;1506:100::-;1589:10;1506:100;:::o;3676:1064::-;3848:15;3885:25;3899:5;3906:3;3885:13;:25::i;:::-;3875:35;;4182:25;4199:7;4182:16;:25::i;:::-;4177:476;;4248:163;4291:7;4320:10;4360:4;4387:6;4248:21;:163::i;:::-;4223:259;;;;-1:-1:-1;;;4223:259:15;;;;;;;:::i;:::-;;;;;;;;;4521:51;4538:7;4555;4565:6;4521:16;:51::i;:::-;4496:146;;;;-1:-1:-1;;;4496:146:15;;;;;;;:::i;:::-;4662:71;;-1:-1:-1;;;4662:71:15;;-1:-1:-1;;;;;4662:36:15;;;;;4706:9;;4662:71;;4717:7;;4726:6;;4662:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3676:1064;;;;;;:::o;4816:252::-;4891:12;4954:23;;;;;;;;;;;;;-1:-1:-1;;;4954:23:15;;;4995:11;5024:23;;;;;;;;;;;;;-1:-1:-1;;;5024:23:15;;;4920:141;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4913:148;;4816:252;;;:::o;5278:223::-;5368:7;5391:12;5406:24;5419:5;5426:3;5406:12;:24::i;:::-;5391:39;;5447:47;5462:1;5465:4;5471:22;:20;:22::i;:::-;5447:14;:47::i;:::-;5440:54;5278:223;-1:-1:-1;;;;5278:223:15:o;5603:187::-;5700:7;5757:5;5764:3;5769:12;:10;:12::i;:::-;5740:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5730:53;;;;;;5723:60;;5603:187;;;;:::o;1752:165:9:-;1835:7;1861:49;1876:4;1882:12;1904:4;1861:14;:49::i;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1200:442:34:-;1346:4;1381:254;1407:7;1538:6;1566:9;1597:6;1432:189;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1432:189:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:189:34;-1:-1:-1;;;1432:189:34;;;1381:8;:254::i;:::-;1362:273;1200:442;-1:-1:-1;;;;;1200:442:34:o;826:368::-;941:4;976:211;1002:7;1120;1149:6;1027:146;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1027:146:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1027:146:34;-1:-1:-1;;;1027:146:34;;;976:8;:211::i;1013:535:9:-;1100:7;1119:12;1174:6;1149:21;:31;;1141:73;;;;-1:-1:-1;;;1141:73:9;;;;;;;:::i;:::-;1232:15;;1224:65;;;;-1:-1:-1;;;1224:65:9;;;;;;;:::i;:::-;1440:4;1429:8;1423:15;1416:4;1406:8;1402:19;1394:6;1386:59;1378:67;-1:-1:-1;;;;;;1472:18:9;;1464:56;;;;-1:-1:-1;;;1464:56:9;;;;;;;:::i;2160:276::-;2261:7;2280:13;2343:4;2336:12;;2350:8;2360:4;2366:12;2319:60;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;2319:60:9;;;;;;2296:93;;2319:60;2296:93;;;;;2160:276;-1:-1:-1;;;;;2160:276:9:o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;5:130:-1:-;72:20;;-1:-1;;;;;12972:54;;14100:35;;14090:2;;14149:1;;14139:12;414:366;;;535:2;523:9;514:7;510:23;506:32;503:2;;;-1:-1;;541:12;503:2;603:53;648:7;624:22;603:53;:::i;:::-;593:63;;711:53;756:7;693:2;736:9;732:22;711:53;:::i;:::-;701:63;;497:283;;;;;:::o;787:617::-;;;;;942:3;930:9;921:7;917:23;913:33;910:2;;;-1:-1;;949:12;910:2;1011:53;1056:7;1032:22;1011:53;:::i;:::-;1001:63;;1119:53;1164:7;1101:2;1144:9;1140:22;1119:53;:::i;:::-;1109:63;;1227:53;1272:7;1209:2;1252:9;1248:22;1227:53;:::i;:::-;904:500;;;;-1:-1;1217:63;;1317:2;1356:22;344:20;;-1:-1;;904:500::o;1411:257::-;;1523:2;1511:9;1502:7;1498:23;1494:32;1491:2;;;-1:-1;;1529:12;1491:2;223:6;217:13;14246:5;12654:13;12647:21;14224:5;14221:32;14211:2;;-1:-1;;14257:12;14211:2;1581:71;1485:183;-1:-1;;;1485:183::o;5364:531::-;-1:-1;;;;;;14013:2;14009:14;;;;;1884:58;;14009:14;;;;;;;5645:2;5636:12;;1884:58;5747:12;;;2198:58;5858:12;;;5536:359::o;5902:665::-;-1:-1;;;;;;12741:78;;;;2041:56;;14013:2;14009:14;;;;-1:-1;;;;;;14009:14;6207:1;6198:11;;1884:58;6308:12;;;2198:58;6419:12;;;2198:58;6530:12;;;6100:467::o;6574:271::-;;2778:5;11953:12;2889:52;2934:6;2929:3;2922:4;2915:5;2911:16;2889:52;:::i;:::-;2953:16;;;;;6708:137;-1:-1;;6708:137::o;6852:567::-;;2778:5;11953:12;2889:52;2934:6;2929:3;2922:4;2915:5;2911:16;2889:52;:::i;:::-;14013:2;14009:14;;;-1:-1;;;;;;14009:14;2953:16;;;1884:58;;;11953:12;;2889:52;11953:12;7280:2;7271:12;;2922:4;2911:16;;2889:52;:::i;:::-;2953:16;7280:2;2953:16;;7060:359;-1:-1;;;;;7060:359::o;7426:222::-;-1:-1;;;;;12972:54;;;;1746:37;;7553:2;7538:18;;7524:124::o;7655:333::-;-1:-1;;;;;12972:54;;;1746:37;;12972:54;;7974:2;7959:18;;1746:37;7810:2;7795:18;;7781:207::o;7995:444::-;-1:-1;;;;;12972:54;;;1746:37;;12972:54;;;;8342:2;8327:18;;1746:37;8425:2;8410:18;;2198:58;;;;8178:2;8163:18;;8149:290::o;8446:333::-;-1:-1;;;;;12972:54;;;;1746:37;;8765:2;8750:18;;2198:58;8601:2;8586:18;;8572:207::o;8786:306::-;;8931:2;8952:17;8945:47;2410:5;11953:12;12109:6;8931:2;8920:9;8916:18;12097:19;2503:52;2548:6;12137:14;8920:9;12137:14;8931:2;2529:5;2525:16;2503:52;:::i;:::-;13918:7;13902:14;-1:-1;;13898:28;2567:39;;;;12137:14;2567:39;;8902:190;-1:-1;;8902:190::o;9099:416::-;9299:2;9313:47;;;9284:18;;;12097:19;3242:34;12137:14;;;3222:55;3296:12;;;9270:245::o;9522:416::-;9722:2;9736:47;;;3547:2;9707:18;;;12097:19;3583:27;12137:14;;;3563:48;3630:12;;;9693:245::o;9945:416::-;10145:2;10159:47;;;3881:2;10130:18;;;12097:19;-1:-1;;;12137:14;;;3897:40;3956:12;;;10116:245::o;10368:416::-;10568:2;10582:47;;;4207:2;10553:18;;;12097:19;4243:34;12137:14;;;4223:55;-1:-1;;;4298:12;;;4291:28;4338:12;;;10539:245::o;10791:416::-;10991:2;11005:47;;;4589:2;10976:18;;;12097:19;4625:34;12137:14;;;4605:55;-1:-1;;;4680:12;;;4673:29;4721:12;;;10962:245::o;11214:416::-;11414:2;11428:47;;;4972:2;11399:18;;;12097:19;5008:31;12137:14;;;4988:52;5059:12;;;11385:245::o;11637:222::-;2198:58;;;11764:2;11749:18;;11735:124::o;13118:268::-;13183:1;13190:101;13204:6;13201:1;13198:13;13190:101;;;13271:11;;;13265:18;13252:11;;;13245:39;13226:2;13219:10;13190:101;;;13306:6;13303:1;13300:13;13297:2;;;13183:1;13362:6;13357:3;13353:16;13346:27;13297:2;;13167:219;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "553400",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "createChannel(address,address)": "infinite",
                "createChannelAndDepositAlice(address,address,address,uint256)": "infinite",
                "getChainId()": "infinite",
                "getChannelAddress(address,address)": "infinite",
                "getMastercopy()": "infinite",
                "getProxyCreationCode()": "infinite",
                "getStoredChainId()": "infinite"
              },
              "internal": {
                "_getProxyCreationCode(address)": "infinite",
                "deployChannelProxy(address,address)": "infinite",
                "generateSalt(address,address)": "infinite"
              }
            },
            "methodIdentifiers": {
              "createChannel(address,address)": "35a1ba6f",
              "createChannelAndDepositAlice(address,address,address,uint256)": "fe454501",
              "getChainId()": "3408e470",
              "getChannelAddress(address,address)": "e617aaac",
              "getMastercopy()": "efe43693",
              "getProxyCreationCode()": "15727e91",
              "getStoredChainId()": "32a130c9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mastercopy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"name\":\"ChannelCreation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"createChannel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"createChannelAndDepositAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"getChannelAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMastercopy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStoredChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Creates a new `ChannelFactory`\",\"params\":{\"_chainId\":\"the chain identifier when generating the CREATE2 salt. If zero, the chain identifier used in the proxy salt will be the result of the opcode\",\"_mastercopy\":\"the address of the `ChannelMastercopy` (channel logic)\"}},\"createChannel(address,address)\":{\"details\":\"Allows us to create new channel contract and get it all set up in one transaction\",\"params\":{\"alice\":\"address of the high fidelity channel participant\",\"bob\":\"address of the other channel participant\"}},\"createChannelAndDepositAlice(address,address,address,uint256)\":{\"details\":\"Allows us to create a new channel contract and fund it in one transaction\",\"params\":{\"bob\":\"address of the other channel participant\"}},\"getChainId()\":{\"details\":\"Allows us to get the chainId that this factory will use in the create2 salt\"},\"getChannelAddress(address,address)\":{\"details\":\"Allows us to get the address for a new channel contract created via `createChannel`\",\"params\":{\"alice\":\"address of the igh fidelity channel participant\",\"bob\":\"address of the other channel participant\"}},\"getMastercopy()\":{\"details\":\"Allows us to get the mastercopy that this factory will deploy channels against\"},\"getProxyCreationCode()\":{\"details\":\"Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`\"},\"getStoredChainId()\":{\"details\":\"Allows us to get the chainId that this factory has stored\"}},\"title\":\"ChannelFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Creates and sets up a new channel proxy contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/ChannelFactory.sol\":\"ChannelFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n    /**\\n     * @dev Deploys a contract using `CREATE2`. The address where the contract\\n     * will be deployed can be known in advance via {computeAddress}.\\n     *\\n     * The bytecode for a contract can be obtained from Solidity with\\n     * `type(contractName).creationCode`.\\n     *\\n     * Requirements:\\n     *\\n     * - `bytecode` must not be empty.\\n     * - `salt` must have not been used for `bytecode` already.\\n     * - the factory must have a balance of at least `amount`.\\n     * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n     */\\n    function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {\\n        address addr;\\n        require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n        require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n        }\\n        require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n        return addr;\\n    }\\n\\n    /**\\n     * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n     * `bytecodeHash` or `salt` will result in a new destination address.\\n     */\\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n        return computeAddress(salt, bytecodeHash, address(this));\\n    }\\n\\n    /**\\n     * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n     * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n     */\\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {\\n        bytes32 _data = keccak256(\\n            abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)\\n        );\\n        return address(uint256(_data));\\n    }\\n}\\n\",\"keccak256\":\"0x539295edd21ad514c0b1a0d1c89ada0831942f379ea83b6eb85769211fc7937e\",\"license\":\"MIT\"},\"src.sol/ChannelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/utils/Create2.sol\\\";\\n\\nimport \\\"./interfaces/IChannelFactory.sol\\\";\\nimport \\\"./interfaces/IVectorChannel.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibERC20.sol\\\";\\n\\n/// @title ChannelFactory\\n/// @author Connext <support@connext.network>\\n/// @notice Creates and sets up a new channel proxy contract\\ncontract ChannelFactory is IChannelFactory {\\n    // Creation code constants taken from EIP1167\\n    bytes private constant proxyCreationCodePrefix =\\n        hex\\\"3d602d80600a3d3981f3_363d3d373d3d3d363d73\\\";\\n    bytes private constant proxyCreationCodeSuffix =\\n        hex\\\"5af43d82803e903d91602b57fd5bf3\\\";\\n\\n    bytes32 private creationCodeHash;\\n    address private immutable mastercopy;\\n    uint256 private immutable chainId;\\n\\n    /// @dev Creates a new `ChannelFactory`\\n    /// @param _mastercopy the address of the `ChannelMastercopy` (channel logic)\\n    /// @param _chainId the chain identifier when generating the CREATE2 salt. If zero, the chain identifier used in the proxy salt will be the result of the opcode\\n    constructor(address _mastercopy, uint256 _chainId) {\\n        mastercopy = _mastercopy;\\n        chainId = _chainId;\\n        creationCodeHash = keccak256(_getProxyCreationCode(_mastercopy));\\n    }\\n\\n    ////////////////////////////////////////\\n    // Public Methods\\n\\n    /// @dev Allows us to get the mastercopy that this factory will deploy channels against\\n    function getMastercopy() external view override returns (address) {\\n        return mastercopy;\\n    }\\n\\n    /// @dev Allows us to get the chainId that this factory will use in the create2 salt\\n    function getChainId() public view override returns (uint256 _chainId) {\\n        // Hold in memory to reduce sload calls\\n        uint256 chain = chainId;\\n        if (chain == 0) {\\n            assembly {\\n                _chainId := chainid()\\n            }\\n        } else {\\n            _chainId = chain;\\n        }\\n    }\\n\\n    /// @dev Allows us to get the chainId that this factory has stored\\n    function getStoredChainId() external view override returns (uint256) {\\n        return chainId;\\n    }\\n\\n    /// @dev Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`\\n    function getProxyCreationCode()\\n        public\\n        view\\n        override\\n        returns (bytes memory)\\n    {\\n        return _getProxyCreationCode(mastercopy);\\n    }\\n\\n    /// @dev Allows us to get the address for a new channel contract created via `createChannel`\\n    /// @param alice address of the igh fidelity channel participant\\n    /// @param bob address of the other channel participant\\n    function getChannelAddress(address alice, address bob)\\n        external\\n        view\\n        override\\n        returns (address)\\n    {\\n        return\\n            Create2.computeAddress(\\n                generateSalt(alice, bob),\\n                creationCodeHash\\n            );\\n    }\\n\\n    /// @dev Allows us to create new channel contract and get it all set up in one transaction\\n    /// @param alice address of the high fidelity channel participant\\n    /// @param bob address of the other channel participant\\n    function createChannel(address alice, address bob)\\n        public\\n        override\\n        returns (address channel)\\n    {\\n        channel = deployChannelProxy(alice, bob);\\n        IVectorChannel(channel).setup(alice, bob);\\n        emit ChannelCreation(channel);\\n    }\\n\\n    /// @dev Allows us to create a new channel contract and fund it in one transaction\\n    /// @param bob address of the other channel participant\\n    function createChannelAndDepositAlice(\\n        address alice,\\n        address bob,\\n        address assetId,\\n        uint256 amount\\n    ) external payable override returns (address channel) {\\n        channel = createChannel(alice, bob);\\n        // Deposit funds (if a token) must be approved for the\\n        // `ChannelFactory`, which then claims the funds and transfers\\n        // to the channel address. While this is inefficient, this is\\n        // the safest/clearest way to transfer funds\\n        if (!LibAsset.isEther(assetId)) {\\n            require(\\n                LibERC20.transferFrom(\\n                    assetId,\\n                    msg.sender,\\n                    address(this),\\n                    amount\\n                ),\\n                \\\"ChannelFactory: ERC20_TRANSFER_FAILED\\\"\\n            );\\n            require(\\n                LibERC20.approve(assetId, address(channel), amount),\\n                \\\"ChannelFactory: ERC20_APPROVE_FAILED\\\"\\n            );\\n        }\\n        IVectorChannel(channel).depositAlice{value: msg.value}(assetId, amount);\\n    }\\n\\n    ////////////////////////////////////////\\n    // Internal Methods\\n\\n    function _getProxyCreationCode(address _mastercopy) internal pure returns (bytes memory) {\\n      return abi.encodePacked(\\n                proxyCreationCodePrefix,\\n                _mastercopy,\\n                proxyCreationCodeSuffix\\n            );\\n    }\\n\\n    /// @dev Allows us to create new channel contact using CREATE2\\n    /// @param alice address of the high fidelity participant in the channel\\n    /// @param bob address of the other channel participant\\n    function deployChannelProxy(address alice, address bob)\\n        internal\\n        returns (address)\\n    {\\n        bytes32 salt = generateSalt(alice, bob);\\n        return Create2.deploy(0, salt, getProxyCreationCode());\\n    }\\n\\n    /// @dev Generates the unique salt for calculating the CREATE2 address of the channel proxy\\n    function generateSalt(address alice, address bob)\\n        internal\\n        view\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encodePacked(alice, bob, getChainId()));\\n    }\\n}\\n\",\"keccak256\":\"0x9b30b13dd79eea72eadd2bec3eba0f515929259a21d2ece6b982703c280e532a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IChannelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface IChannelFactory {\\n    event ChannelCreation(address channel);\\n\\n    function getMastercopy() external view returns (address);\\n\\n    function getChainId() external view returns (uint256);\\n\\n    function getStoredChainId() external view returns (uint256);\\n\\n    function getProxyCreationCode() external view returns (bytes memory);\\n\\n    function getChannelAddress(address alice, address bob)\\n        external\\n        view\\n        returns (address);\\n\\n    function createChannel(address alice, address bob)\\n        external\\n        returns (address);\\n\\n    function createChannelAndDepositAlice(\\n        address alice,\\n        address bob,\\n        address assetId,\\n        uint256 amount\\n    ) external payable returns (address);\\n}\\n\",\"keccak256\":\"0x2330bd554f878feb2494fb9dd830a1707865b63cfd6471a8dad1e5912ebf72ea\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3100,
                "contract": "src.sol/ChannelFactory.sol:ChannelFactory",
                "label": "creationCodeHash",
                "offset": 0,
                "slot": "0",
                "type": "t_bytes32"
              }
            ],
            "types": {
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Creates and sets up a new channel proxy contract",
            "version": 1
          }
        }
      },
      "src.sol/ChannelMastercopy.sol": {
        "ChannelMastercopy": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                }
              ],
              "name": "ChannelDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "ChannelDisputed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedInitialState",
                  "type": "bytes"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "TransferDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "TransferDisputed",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "indices",
                  "type": "uint256[]"
                }
              ],
              "name": "defundChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedInitialTransferState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedTransferResolver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "responderSignature",
                  "type": "bytes"
                }
              ],
              "name": "defundTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "disputeChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "merkleProofData",
                  "type": "bytes32[]"
                }
              ],
              "name": "disputeTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChannelDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getDefundNonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "transferId",
                  "type": "bytes32"
                }
              ],
              "name": "getTransferDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                }
              ],
              "name": "getWithdrawalTransactionRecord",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              },
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": {
                "params": {
                  "aliceSignature": "Signature of owner a",
                  "bobSignature": "Signature of owner b",
                  "wd": "The withdraw data consisting of semantic withdraw information, i.e. assetId, recipient, and amount; information to make an optional call in addition to the actual transfer, i.e. target address for the call and call payload; additional information, i.e. channel address and nonce."
                }
              }
            },
            "title": "ChannelMastercopy",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b608052613ffa61008b60003980610128528061041b52806107c752806108425280610a765280610b945280610c3d528061114652806112bb5280611423528061156e52806115ea528061167e52806116f252806118f6528061197f5280611a085280611aa15280611b245250613ffa6000f3fe6080604052600436106101185760003560e01c80636f33389e116100a0578063e7283a8d11610064578063e7283a8d14610384578063e9852569146103a4578063eeb30fea146103c4578063f19eb10e146103d9578063f83d08ba146103fb57610198565b80636f33389e146102ca5780638c048fc2146102f7578063b081e9c814610324578063c60939be14610344578063cefa51221461036457610198565b80633ff0da16116100e75780633ff0da161461022a5780634d3fcbda146102575780635bc9d96d146102775780635fd334d914610297578063635ae901146102b757610198565b8063072f25fd1461019d578063241686a0146101bf5780632c889aa1146101ea5780632d34ba791461020a57610198565b3661019857306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561016f5760405162461bcd60e51b815260040161016690613cab565b60405180910390fd5b6001600054146101915760405162461bcd60e51b815260040161016690613a67565b6001600055005b600080fd5b3480156101a957600080fd5b506101bd6101b8366004612b84565b610410565b005b3480156101cb57600080fd5b506101d46107ba565b6040516101e191906131ad565b60405180910390f35b3480156101f657600080fd5b506101bd610205366004612c61565b610837565b34801561021657600080fd5b506101bd6102253660046127a8565b610a6b565b34801561023657600080fd5b5061024a610245366004612875565b610b81565b6040516101e19190613dc6565b34801561026357600080fd5b506101bd610272366004612a22565b610c32565b34801561028357600080fd5b506101bd6102923660046127e0565b61113b565b3480156102a357600080fd5b506101bd6102b2366004612b31565b6112b0565b6101bd6102c536600461282a565b611418565b3480156102d657600080fd5b506102ea6102e536600461278c565b611561565b6040516101e19190613e1e565b34801561030357600080fd5b50610317610312366004612c2f565b6115dd565b6040516101e1919061337b565b34801561033057600080fd5b506102ea61033f36600461278c565b611671565b34801561035057600080fd5b506101bd61035f366004612ab2565b6116e7565b34801561037057600080fd5b506102ea61037f36600461278c565b6118e9565b34801561039057600080fd5b506102ea61039f36600461278c565b611972565b3480156103b057600080fd5b506102ea6103bf3660046127a8565b6119fb565b3480156103d057600080fd5b506101d4611a94565b3480156103e557600080fd5b506103ee611b11565b6040516101e19190613d6a565b34801561040757600080fd5b506102ea611bb9565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104595760405162461bcd60e51b815260040161016690613cab565b60016000541461047b5760405162461bcd60e51b815260040161016690613a67565b6002600055863061048f602083018361278c565b6001600160a01b0316146104b55760405162461bcd60e51b81526004016101669061358d565b6020808901356000908152600d9091526040902060018101546104ea5760405162461bcd60e51b8152600401610166906139b6565b80546104f58a611bbf565b146105125760405162461bcd60e51b815260040161016690613d17565b600281015460ff16156105375760405162461bcd60e51b8152600401610166906136d5565b60028101805460ff1916600117905561054e61262e565b816001015442101561073657896101600135898960405161057092919061314d565b6040518091039020146105955760405162461bcd60e51b815260040161016690613d17565b6105a560a08b0160808c0161278c565b6001600160a01b0316336001600160a01b03161480610616575061061685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106099250505060a08d0160808e0161278c565b6101608d01359190611bef565b6106325760405162461bcd60e51b815260040161016690613c76565b600061064460608c0160408d0161278c565b9050806001600160a01b0316638ef98a7e8c60c0016040516020016106699190613d5c565b6040516020818303038152906040528c8c8c8c6040518663ffffffff1660e01b815260040161069c9594939291906133a4565b60806040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061295f565b915061070060c08c013560e08d0135611c17565b82516020810151905161071291611c17565b11156107305760405162461bcd60e51b815260040161016690613ce2565b5061074b565b610748368b90038b0160c08c0161288d565b90505b61076461075e60c08c0160a08d0161278c565b82611c43565b7f93f6b8187e81bd7d01ce234c043cd6ae4feda2e2ae91daae0962c68a656da8c7338b848c8c8c8c886040516107a1989796959493929190613273565b60405180910390a1505060016000555050505050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108055760405162461bcd60e51b815260040161016690613cab565b6001600054146108275760405162461bcd60e51b815260040161016690613a67565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108805760405162461bcd60e51b815260040161016690613cab565b6001600054146108a25760405162461bcd60e51b815260040161016690613a67565b600260005584306108b6602083018361278c565b6001600160a01b0316146108dc5760405162461bcd60e51b8152600401610166906134bc565b60006108e787611c99565b90506108f68187878787611cac565b60008181526006602052604090205460ff16156109255760405162461bcd60e51b8152600401610166906138c5565b6000818152600660209081526040808320805460ff1916600117905561095d91610953918b01908b0161278c565b8960600135611db6565b905060008111806109875750600061097b60c08a0160a08b0161278c565b6001600160a01b031614155b6109a35760405162461bcd60e51b8152600401610166906134f3565b6109cc6109b660408a0160208b0161278c565b6109c660608b0160408c0161278c565b83611dca565b60006109de60c08a0160a08b0161278c565b6001600160a01b031614610a5c576109fc60c0890160a08a0161278c565b6001600160a01b031663f50cd32c89836040518363ffffffff1660e01b8152600401610a29929190613dfc565b600060405180830381600087803b158015610a4357600080fd5b505af1158015610a57573d6000803e3d6000fd5b505050505b50506001600055505050505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610ab45760405162461bcd60e51b815260040161016690613cab565b6001546001600160a01b031615610add5760405162461bcd60e51b815260040161016690613bc2565b6001600160a01b03821615801590610afd57506001600160a01b03811615155b610b195760405162461bcd60e51b81526004016101669061384d565b806001600160a01b0316826001600160a01b03161415610b4b5760405162461bcd60e51b8152600401610166906135c2565b610b53611dfb565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b610b89612653565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610bd25760405162461bcd60e51b815260040161016690613cab565b600160005414610bf45760405162461bcd60e51b815260040161016690613a67565b506000908152600d60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610c7b5760405162461bcd60e51b815260040161016690613cab565b600160005414610c9d5760405162461bcd60e51b815260040161016690613a67565b60026000558430610cb1602083018361278c565b6001600160a01b0316148015610ce957506001546001600160a01b0316610cde604083016020840161278c565b6001600160a01b0316145b8015610d1757506002546001600160a01b0316610d0c606083016040840161278c565b6001600160a01b0316145b610d335760405162461bcd60e51b815260040161016690613755565b83610d505760405162461bcd60e51b81526004016101669061371e565b83821115610d705760405162461bcd60e51b815260040161016690613bf2565b600754610d7c87611e02565b14610d995760405162461bcd60e51b815260040161016690613441565b610da1611e15565b610dbd5760405162461bcd60e51b815260040161016690613556565b60005b848110156110ed576000868683818110610dd657fe5b9050602002016020810190610deb919061278c565b9050600084831015610e7057858584818110610e0357fe5b905060200201359050888060600190610e1c9190613e27565b82818110610e2657fe5b9050602002016020810190610e3b919061278c565b6001600160a01b0316826001600160a01b031614610e6b5760405162461bcd60e51b815260040161016690613485565b610edc565b5060005b610e8160608a018a613e27565b9050811015610edc57610e9760608a018a613e27565b82818110610ea157fe5b9050602002016020810190610eb6919061278c565b6001600160a01b0316826001600160a01b03161415610ed457610edc565b600101610e74565b6000610eeb60608b018b613e27565b90508214610f1657610f0060e08b018b613e27565b83818110610f0a57fe5b90506020020135610f19565b60015b6001600160a01b0384166000908152600c60205260409020549091508111610f535760405162461bcd60e51b8152600401610166906137ce565b6001600160a01b0383166000908152600c6020526040812091909155610f7883611e32565b90506000610f8584611e4d565b9050610f8f61262e565b610f9c60608d018d613e27565b9050841415611026576040518060400160405280604051806040016040528086815260200185815250815260200160405180604001604052808f6020016020810190610fe8919061278c565b6001600160a01b03166001600160a01b031681526020018f6040016020810190611012919061278c565b6001600160a01b03169052905290506110d2565b61103360808d018d613e6d565b8581811061103d57fe5b905060800201803603810190611053919061288d565b905061109461106560a08e018e613e27565b8681811061106f57fe5b905060200201358403826000015160006002811061108957fe5b602002015190611e82565b8151526110cb6110a760c08e018e613e27565b868181106110b157fe5b905060200201358303826000015160016002811061108957fe5b8151602001525b6110dc8582611c43565b505060019093019250610dc0915050565b507f49cbb28c69ffbdb6b3893f83d64557662a5dd43ffd6045b6a5180ab0a027f2243387600788886040516111269594939291906131f4565b60405180910390a15050600160005550505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111845760405162461bcd60e51b815260040161016690613cab565b6001600054146111a65760405162461bcd60e51b815260040161016690613a67565b6002600055336001600160a01b03831614806111d35750806001600160a01b0316826001600160a01b0316145b6111ef5760405162461bcd60e51b815260040161016690613b8b565b6001600160a01b038084166000908152600460209081526040808320938616835292905290812054611222908590611db6565b9050600081116112445760405162461bcd60e51b815260040161016690613ae2565b6001600160a01b038085166000908152600460209081526040808320938716835292905220546112749082611e9b565b6001600160a01b038086166000908152600460209081526040808320938816835292905220556112a5848383611dca565b505060016000555050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156112f95760405162461bcd60e51b815260040161016690613cab565b60016000541461131b5760405162461bcd60e51b815260040161016690613a67565b6002600055823061132f602083018361278c565b6001600160a01b0316146113555760405162461bcd60e51b81526004016101669061358d565b600061136085611bbf565b9050611373848460076002015484611edd565b61137b611e15565b6113975760405162461bcd60e51b815260040161016690613556565b6020808601356000908152600d909152604090206001810154156113cd5760405162461bcd60e51b815260040161016690613b42565b8181556113df42610140880135611c17565b60018201556040517f87b348a76dd4ef431d45553a1d8c5934db960e64201a5776ab64e3eb397f4cfa9061112690339089908590613247565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114615760405162461bcd60e51b815260040161016690613cab565b6001600054146114835760405162461bcd60e51b815260040161016690613a67565b600260005561149182611f3f565b156114ba578034146114b55760405162461bcd60e51b8152600401610166906138fc565b611500565b34156114d85760405162461bcd60e51b815260040161016690613975565b6114e482333084611f4c565b6115005760405162461bcd60e51b815260040161016690613884565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906115509084908490613362565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115ac5760405162461bcd60e51b815260040161016690613cab565b6001600054146115ce5760405162461bcd60e51b815260040161016690613a67565b6115d782611e32565b92915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116285760405162461bcd60e51b815260040161016690613cab565b60016000541461164a5760405162461bcd60e51b815260040161016690613a67565b6006600061165784611c99565b815260208101919091526040016000205460ff1692915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116bc5760405162461bcd60e51b815260040161016690613cab565b6001600054146116de5760405162461bcd60e51b815260040161016690613a67565b6115d782611e4d565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117305760405162461bcd60e51b815260040161016690613cab565b6001600054146117525760405162461bcd60e51b815260040161016690613a67565b60026000558430611766602083018361278c565b6001600160a01b031614801561179e57506001546001600160a01b0316611793604083016020840161278c565b6001600160a01b0316145b80156117cc57506002546001600160a01b03166117c1606083016040840161278c565b6001600160a01b0316145b6117e85760405162461bcd60e51b815260040161016690613755565b60006117f387611e02565b9050611803878288888888611f9f565b61180b611e15565b156118285760405162461bcd60e51b815260040161016690613556565b6008546101208801351161184e5760405162461bcd60e51b8152600401610166906135f9565b6118566120a9565b61188a5761186942610100890135611c17565b600a5561188661187f61010089013560026120b1565b4290611c17565b600b555b60078181556101208801356008556101408801356009556040517fef03cf86f2e77e1a0ae5cb25b50519e55b94788b920ace71f92341df2dab97ed916118d39133918b916131c1565b60405180910390a1505060016000555050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156119345760405162461bcd60e51b815260040161016690613cab565b6001600054146119565760405162461bcd60e51b815260040161016690613a67565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156119bd5760405162461bcd60e51b815260040161016690613cab565b6001600054146119df5760405162461bcd60e51b815260040161016690613a67565b506001600160a01b03166000908152600c602052604090205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611a465760405162461bcd60e51b815260040161016690613cab565b600160005414611a685760405162461bcd60e51b815260040161016690613a67565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611adf5760405162461bcd60e51b815260040161016690613cab565b600160005414611b015760405162461bcd60e51b815260040161016690613a67565b506001546001600160a01b031690565b611b19612673565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611b625760405162461bcd60e51b815260040161016690613cab565b600160005414611b845760405162461bcd60e51b815260040161016690613a67565b506040805160a0810182526007548152600854602082015260095491810191909152600a546060820152600b54608082015290565b60005481565b600081604051602001611bd29190613db7565b604051602081830303815290604052805190602001209050919050565b6000816001600160a01b0316611c0585856120eb565b6001600160a01b031614949350505050565b600082820183811015611c3c5760405162461bcd60e51b81526004016101669061369e565b9392505050565b60005b6002811015611c945781516000908260028110611c5f57fe5b602002015190508015611c8b57611c8b8484602001518460028110611c8057fe5b602002015183612103565b50600101611c46565b505050565b600081604051602001611bd29190613de9565b6000600186604051602001611cc29291906133df565b604051602081830303815290604052805190602001209050611d2885858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600154859392506001600160a01b03169050611bef565b611d445760405162461bcd60e51b815260040161016690613b0b565b611d9283838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600254859392506001600160a01b03169050611bef565b611dae5760405162461bcd60e51b815260040161016690613816565b505050505050565b6000611c3c82611dc585612164565b6121fb565b611dd48382612211565b611ddf838383612233565b611c945760405162461bcd60e51b815260040161016690613630565b6001600055565b600081604051602001611bd29190613da4565b60004260076003015411158015611e2d5750600b5442105b905090565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b0381166000908152600560209081526040808320546003909252822054611e7a84612164565b010392915050565b600082820183811015611c3c576000195b949350505050565b6000611c3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061225c565b611f1d8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692508591506122889050565b611f395760405162461bcd60e51b815260040161016690613a9e565b50505050565b6001600160a01b03161590565b6000611f9685858585604051602401611f679392919061333e565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052612325565b95945050505050565b60008086604051602001611fb49291906133df565b60405160208183030381529060405280519060200120905061201e85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120169250505060408a0160208b0161278c565b839190611bef565b61203a5760405162461bcd60e51b815260040161016690613c35565b61208483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120169250505060608a0160408b0161278c565b6120a05760405162461bcd60e51b815260040161016690613667565b50505050505050565b600a54421090565b6000826120c0575060006115d7565b828202828482816120cd57fe5b0414611c3c5760405162461bcd60e51b8152600401610166906139fb565b6000806120f7846123d6565b9050611e9381846123e9565b6001600160a01b038084166000908152600460209081526040808320938616835292905220546121339082611e82565b6001600160a01b03938416600090815260046020908152604080832095909616825293909352929091209190915550565b600061216f82611f3f565b6121f4576040516370a0823160e01b81526001600160a01b038316906370a082319061219f9030906004016131ad565b60206040518083038186803b1580156121b757600080fd5b505afa1580156121cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ef9190612c9a565b6115d7565b5047919050565b600081831061220a5781611c3c565b5090919050565b6001600160a01b03909116600090815260036020526040902080549091019055565b600061223e84611f3f565b6122525761224d848484612517565b611e93565b611e938383612524565b600081848411156122805760405162461bcd60e51b815260040161016691906133f7565b505050900390565b600081815b855181101561231a5760008682815181106122a457fe5b602002602001015190508083116122e55782816040516020016122c892919061313f565b604051602081830303815290604052805190602001209250612311565b80836040516020016122f892919061313f565b6040516020818303038152906040528051906020012092505b5060010161228d565b509092149392505050565b60006123308361259c565b61234c5760405162461bcd60e51b815260040161016690613a3c565b60006060846001600160a01b031684604051612368919061315d565b6000604051808303816000865af19150503d80600081146123a5576040519150601f19603f3d011682016040523d82523d6000602084013e6123aa565b606091505b50915091506123b982826125d5565b80511580611f96575080806020019051810190611f969190612855565b600081604051602001611bd29190613179565b6000815160411461240c5760405162461bcd60e51b81526004016101669061351f565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561245e5760405162461bcd60e51b81526004016101669061378c565b8060ff16601b1415801561247657508060ff16601c14155b156124935760405162461bcd60e51b815260040161016690613933565b6000600187838686604051600081526020016040526040516124b89493929190613386565b6020604051602081039080840390855afa1580156124da573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661250d5760405162461bcd60e51b81526004016101669061340a565b9695505050505050565b6000611e938484846125e6565b6000806060846001600160a01b031684604051612540906131aa565b60006040518083038185875af1925050503d806000811461257d576040519150601f19603f3d011682016040523d82523d6000602084013e612582565b606091505b509150915061259182826125d5565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611e93575050151592915050565b816125e257805160208201fd5b5050565b6000611e938484846040516024016125ff929190613362565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052612325565b60405180604001604052806126416126a1565b815260200161264e6126a1565b905290565b604080516060810182526000808252602082018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806002906020820280368337509192915050565b80356115d781613fac565b60008083601f8401126126db578182fd5b5081356001600160401b038111156126f1578182fd5b602083019150836020808302850101111561270b57600080fd5b9250929050565b60008083601f840112612723578182fd5b5081356001600160401b03811115612739578182fd5b60208301915083602082850101111561270b57600080fd5b60006101608284031215612763578081fd5b50919050565b60006101808284031215612763578081fd5b600060e08284031215612763578081fd5b60006020828403121561279d578081fd5b8135611c3c81613fac565b600080604083850312156127ba578081fd5b82356127c581613fac565b915060208301356127d581613fac565b809150509250929050565b6000806000606084860312156127f4578081fd5b83356127ff81613fac565b9250602084013561280f81613fac565b9150604084013561281f81613fac565b809150509250925092565b6000806040838503121561283c578182fd5b823561284781613fac565b946020939093013593505050565b600060208284031215612866578081fd5b81518015158114611c3c578182fd5b600060208284031215612886578081fd5b5035919050565b60006080828403121561289e578081fd5b6128a86040613eb3565b83601f8401126128b6578182fd5b6128c06040613eb3565b808460408601878111156128d2578586fd5b855b60028110156128f35782358552602094850194909201916001016128d4565b5082855287605f880112612905578586fd5b61290f6040613eb3565b9350839250905060808601871015612925578485fd5b845b600281101561295057813561293b81613fac565b84526020938401939190910190600101612927565b50506020830152509392505050565b600060808284031215612970578081fd5b61297a6040613eb3565b83601f840112612988578182fd5b6129926040613eb3565b808460408601878111156129a4578586fd5b855b60028110156129c55782518552602094850194909201916001016129a6565b5082855287605f8801126129d7578586fd5b6129e16040613eb3565b93508392509050608086018710156129f7578485fd5b845b6002811015612950578151612a0d81613fac565b845260209384019391909101906001016129f9565b600080600080600060608688031215612a39578283fd5b85356001600160401b0380821115612a4f578485fd5b612a5b89838a01612751565b96506020880135915080821115612a70578485fd5b612a7c89838a016126ca565b90965094506040880135915080821115612a94578283fd5b50612aa1888289016126ca565b969995985093965092949392505050565b600080600080600060608688031215612ac9578283fd5b85356001600160401b0380821115612adf578485fd5b612aeb89838a01612751565b96506020880135915080821115612b00578485fd5b612b0c89838a01612712565b90965094506040880135915080821115612b24578283fd5b50612aa188828901612712565b60008060006101a08486031215612b46578081fd5b612b508585612769565b92506101808401356001600160401b03811115612b6b578182fd5b612b77868287016126ca565b9497909650939450505050565b60008060008060008060006101e0888a031215612b9f578485fd5b612ba98989612769565b96506101808801356001600160401b0380821115612bc5578687fd5b612bd18b838c01612712565b90985096506101a08a0135915080821115612bea578384fd5b612bf68b838c01612712565b90965094506101c08a0135915080821115612c0f578384fd5b50612c1c8a828b01612712565b989b979a50959850939692959293505050565b600060208284031215612c40578081fd5b81356001600160401b03811115612c55578182fd5b611e938482850161277b565b600080600080600060608688031215612c78578283fd5b85356001600160401b0380821115612c8e578485fd5b612aeb89838a0161277b565b600060208284031215612cab578081fd5b5051919050565b6001600160a01b03169052565b60008284526020808501945082825b85811015612cfc578135612ce181613fac565b6001600160a01b031687529582019590820190600101612cce565b509495945050505050565b60008284526020808501945082825b85811015612cfc576040808389378781018581529083019085905b6002821015612d62578235612d4581613fac565b6001600160a01b0316815291850191600191909101908501612d31565b5050506080968701969190910190600101612d16565b81835260006001600160fb1b03831115612d90578081fd5b6020830280836020870137939093016020019283525090919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612dee816020860160208601613f80565b601f01601f19169290920160200192915050565b604081833760006040838101828152908301915b6002811015612e475760208335612e2c81613fac565b6001600160a01b031683529283019290910190600101612e16565b5050505050565b8054825260018101546020830152600281015460408301526003810154606083015260040154608090910152565b600061016060208301612e9885612e9383876126bf565b612cb2565b612ea28185613ed9565b9050612eb16020860182612cb2565b50612ebf6040840184613ed9565b612ecc6040860182612cb2565b50612eda6060840184613ee6565b826060870152612eed8387018284612cbf565b92505050612efe6080840184613f2d565b8583036080870152612f11838284612d07565b92505050612f2260a0840184613ee6565b85830360a0870152612f35838284612d78565b92505050612f4660c0840184613ee6565b85830360c0870152612f59838284612d78565b92505050612f6a60e0840184613ee6565b85830360e0870152612f7d838284612d78565b6101008681013590880152610120808701359088015261014095860135959096019490945250929392505050565b8035612fb681613fac565b6001600160a01b03908116835260208281013590840152604082013590612fdc82613fac565b166040830152612fef6060820182613ed9565b612ffc6060840182612cb2565b5061300a6080820182613ed9565b6130176080840182612cb2565b5061302560a0820182613ed9565b61303260a0840182612cb2565b5061304360c0830160c08301612e02565b610140818101359083015261016090810135910152565b80548252600181015460208301526002015460ff161515604090910152565b6000813561308681613fac565b6001600160a01b0390811684526020830135906130a282613fac565b90811660208501526040830135906130b982613fac565b8082166040860152606084013560608601526080840135608086015260a084013591506130e582613fac565b1660a084015260c082013536839003601e19018112613102578182fd5b820180356001600160401b03811115613119578283fd5b803603841315613127578283fd5b60e060c0860152611f9660e086018260208501612dac565b918252602082015260400190565b6000828483379101908152919050565b6000825161316f818460208701613f80565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260e0602082018190526000906131e590830185612e7c565b9050611e936040830184612e4e565b6001600160a01b03861681526101006020820181905260009061321983820188612e7c565b90506132286040840187612e4e565b82810360e084015261323b818587612cbf565b98975050505050505050565b6001600160a01b038416815261020081016132656020830185612fab565b611e936101a083018461305a565b6001600160a01b038916815260006102c060206132928185018c612fab565b6132a06101a085018b61305a565b816102008501526132b4828501898b612dac565b91508382036102208501526132ca828789612dac565b85519093509150600061024085015b60028210156132f85783518152928201926001919091019082016132d9565b5050808501519150610280840160005b600281101561332d5761331b8451613f74565b82529282019290820190600101613308565b505050509998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000606082526133b76060830188612dd6565b82810360208401526133ca818789612dac565b9050828103604084015261323b818587612dac565b60408101600284106133ed57fe5b9281526020015290565b600060208252611c3c6020830184612dd6565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f60408201526309082a6960e31b606082015260800190565b6020808252601e908201527f434d4341646a7564696361746f723a20494e4445585f4d49534d415443480000604082015260600190565b6020808252601d908201527f434d4357697468647261773a204348414e4e454c5f4d49534d41544348000000604082015260600190565b6020808252601290820152710434d4357697468647261773a204e4f5f4f560741b604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f5048415345000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345000000604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f424f425f53494700604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11151955391115160ba1b606082015260800190565b6020808252601f908201527f434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e00604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c00604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526028908201527f434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f604082015267111151955391115160c21b606082015260800190565b6020808252601c908201527f434d4357697468647261773a20494e56414c49445f424f425f53494700000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601d908201527f434d4357697468647261773a20414c52454144595f4558454355544544000000604082015260600190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b60208082526025908201527f434d4341646a7564696361746f723a205452414e534645525f4e4f545f444953604082015264141555115160da1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f506040820152632927a7a360e11b606082015260800190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b6020808252601e908201527f434d4357697468647261773a20494e56414c49445f414c4943455f5349470000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11254d41555115160ba1b606082015260800190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b60208082526023908201527f434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e4760408201526254485360e81b606082015260800190565b60208082526021908201527f434d4341646a7564696361746f723a20494e56414c49445f414c4943455f53496040820152604760f81b606082015260800190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553604082015260600190565b60208082526025908201527f434d4341646a7564696361746f723a20494e56414c49445f5452414e534645526040820152640be9082a6960db1b606082015260800190565b608081016115d78284612e02565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b600060208252611c3c6020830184612e7c565b61018081016115d78284612fab565b815181526020808301519082015260409182015115159181019190915260600190565b600060208252611c3c6020830184613079565b600060408252613e0f6040830185613079565b90508260208301529392505050565b90815260200190565b6000808335601e19843603018112613e3d578283fd5b8301803591506001600160401b03821115613e56578283fd5b602090810192508102360382131561270b57600080fd5b6000808335601e19843603018112613e83578283fd5b8301803591506001600160401b03821115613e9c578283fd5b602001915060808102360382131561270b57600080fd5b6040518181016001600160401b0381118282101715613ed157600080fd5b604052919050565b60008235611c3c81613fac565b6000808335601e19843603018112613efc578283fd5b83016020810192503590506001600160401b03811115613f1b57600080fd5b60208102360383131561270b57600080fd5b6000808335601e19843603018112613f43578283fd5b83016020810192503590506001600160401b03811115613f6257600080fd5b60808102360383131561270b57600080fd5b6001600160a01b031690565b60005b83811015613f9b578181015183820152602001613f83565b83811115611f395750506000910152565b6001600160a01b0381168114613fc157600080fd5b5056fea26469706673582212200c5761a7a244ea0132fa44dddcf0e7db8a07d95db5eae27e73fff5d050f1145c64736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0x3FFA PUSH2 0x8B PUSH1 0x0 CODECOPY DUP1 PUSH2 0x128 MSTORE DUP1 PUSH2 0x41B MSTORE DUP1 PUSH2 0x7C7 MSTORE DUP1 PUSH2 0x842 MSTORE DUP1 PUSH2 0xA76 MSTORE DUP1 PUSH2 0xB94 MSTORE DUP1 PUSH2 0xC3D MSTORE DUP1 PUSH2 0x1146 MSTORE DUP1 PUSH2 0x12BB MSTORE DUP1 PUSH2 0x1423 MSTORE DUP1 PUSH2 0x156E MSTORE DUP1 PUSH2 0x15EA MSTORE DUP1 PUSH2 0x167E MSTORE DUP1 PUSH2 0x16F2 MSTORE DUP1 PUSH2 0x18F6 MSTORE DUP1 PUSH2 0x197F MSTORE DUP1 PUSH2 0x1A08 MSTORE DUP1 PUSH2 0x1AA1 MSTORE DUP1 PUSH2 0x1B24 MSTORE POP PUSH2 0x3FFA PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x118 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F33389E GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE7283A8D GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE7283A8D EQ PUSH2 0x384 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0xF19EB10E EQ PUSH2 0x3D9 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x3FB JUMPI PUSH2 0x198 JUMP JUMPDEST DUP1 PUSH4 0x6F33389E EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0x8C048FC2 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0xC60939BE EQ PUSH2 0x344 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x364 JUMPI PUSH2 0x198 JUMP JUMPDEST DUP1 PUSH4 0x3FF0DA16 GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x3FF0DA16 EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x4D3FCBDA EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x5FD334D9 EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x2B7 JUMPI PUSH2 0x198 JUMP JUMPDEST DUP1 PUSH4 0x72F25FD EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0x241686A0 EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0x2C889AA1 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x20A JUMPI PUSH2 0x198 JUMP JUMPDEST CALLDATASIZE PUSH2 0x198 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x16F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x191 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x1B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B84 JUMP JUMPDEST PUSH2 0x410 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D4 PUSH2 0x7BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x31AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C61 JUMP JUMPDEST PUSH2 0x837 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x225 CALLDATASIZE PUSH1 0x4 PUSH2 0x27A8 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24A PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0x2875 JUMP JUMPDEST PUSH2 0xB81 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A22 JUMP JUMPDEST PUSH2 0xC32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x27E0 JUMP JUMPDEST PUSH2 0x113B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x2B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B31 JUMP JUMPDEST PUSH2 0x12B0 JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x2C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x282A JUMP JUMPDEST PUSH2 0x1418 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x3E1E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x317 PUSH2 0x312 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C2F JUMP JUMPDEST PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x337B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x33F CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x1671 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x35F CALLDATASIZE PUSH1 0x4 PUSH2 0x2AB2 JUMP JUMPDEST PUSH2 0x16E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x18E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x1972 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x3BF CALLDATASIZE PUSH1 0x4 PUSH2 0x27A8 JUMP JUMPDEST PUSH2 0x19FB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D4 PUSH2 0x1A94 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EE PUSH2 0x1B11 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x3D6A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x1BB9 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x459 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x47B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP7 ADDRESS PUSH2 0x48F PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x4B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x358D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x39B6 JUMP JUMPDEST DUP1 SLOAD PUSH2 0x4F5 DUP11 PUSH2 0x1BBF JUMP JUMPDEST EQ PUSH2 0x512 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3D17 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x537 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x36D5 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x54E PUSH2 0x262E JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x736 JUMPI DUP10 PUSH2 0x160 ADD CALLDATALOAD DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0x570 SWAP3 SWAP2 SWAP1 PUSH2 0x314D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 EQ PUSH2 0x595 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3D17 JUMP JUMPDEST PUSH2 0x5A5 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x616 JUMPI POP PUSH2 0x616 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x609 SWAP3 POP POP POP PUSH1 0xA0 DUP14 ADD PUSH1 0x80 DUP15 ADD PUSH2 0x278C JUMP JUMPDEST PUSH2 0x160 DUP14 ADD CALLDATALOAD SWAP2 SWAP1 PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x632 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3C76 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x644 PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x278C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8EF98A7E DUP13 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x669 SWAP2 SWAP1 PUSH2 0x3D5C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x69C SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x33A4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6EC SWAP2 SWAP1 PUSH2 0x295F JUMP JUMPDEST SWAP2 POP PUSH2 0x700 PUSH1 0xC0 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP14 ADD CALLDATALOAD PUSH2 0x1C17 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x712 SWAP2 PUSH2 0x1C17 JUMP JUMPDEST GT ISZERO PUSH2 0x730 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CE2 JUMP JUMPDEST POP PUSH2 0x74B JUMP JUMPDEST PUSH2 0x748 CALLDATASIZE DUP12 SWAP1 SUB DUP12 ADD PUSH1 0xC0 DUP13 ADD PUSH2 0x288D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x764 PUSH2 0x75E PUSH1 0xC0 DUP13 ADD PUSH1 0xA0 DUP14 ADD PUSH2 0x278C JUMP JUMPDEST DUP3 PUSH2 0x1C43 JUMP JUMPDEST PUSH32 0x93F6B8187E81BD7D01CE234C043CD6AE4FEDA2E2AE91DAAE0962C68A656DA8C7 CALLER DUP12 DUP5 DUP13 DUP13 DUP13 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x7A1 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x805 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x827 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x880 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x8A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x8B6 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x34BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E7 DUP8 PUSH2 0x1C99 JUMP JUMPDEST SWAP1 POP PUSH2 0x8F6 DUP2 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1CAC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x925 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x38C5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x95D SWAP2 PUSH2 0x953 SWAP2 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST DUP10 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x1DB6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 PUSH2 0x987 JUMPI POP PUSH1 0x0 PUSH2 0x97B PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x9A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x34F3 JUMP JUMPDEST PUSH2 0x9CC PUSH2 0x9B6 PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH2 0x9C6 PUSH1 0x60 DUP12 ADD PUSH1 0x40 DUP13 ADD PUSH2 0x278C JUMP JUMPDEST DUP4 PUSH2 0x1DCA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9DE PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xA5C JUMPI PUSH2 0x9FC PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF50CD32C DUP10 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA29 SWAP3 SWAP2 SWAP1 PUSH2 0x3DFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xAB4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3BC2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xAFD JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0xB19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x384D JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xB4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x35C2 JUMP JUMPDEST PUSH2 0xB53 PUSH2 0x1DFB JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xB89 PUSH2 0x2653 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xBD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xBF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xC7B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xC9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0xCB1 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xCE9 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCDE PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0xD17 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD0C PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3755 JUMP JUMPDEST DUP4 PUSH2 0xD50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x371E JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH2 0xD70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3BF2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0xD7C DUP8 PUSH2 0x1E02 JUMP JUMPDEST EQ PUSH2 0xD99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3441 JUMP JUMPDEST PUSH2 0xDA1 PUSH2 0x1E15 JUMP JUMPDEST PUSH2 0xDBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x10ED JUMPI PUSH1 0x0 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0xDD6 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xDEB SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP4 LT ISZERO PUSH2 0xE70 JUMPI DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xE03 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 POP DUP9 DUP1 PUSH1 0x60 ADD SWAP1 PUSH2 0xE1C SWAP2 SWAP1 PUSH2 0x3E27 JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xE26 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE3B SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE6B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3485 JUMP JUMPDEST PUSH2 0xEDC JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH2 0xE81 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3E27 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH2 0xE97 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3E27 JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xEA1 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xEB6 SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xED4 JUMPI PUSH2 0xEDC JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEEB PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x3E27 JUMP JUMPDEST SWAP1 POP DUP3 EQ PUSH2 0xF16 JUMPI PUSH2 0xF00 PUSH1 0xE0 DUP12 ADD DUP12 PUSH2 0x3E27 JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0xF19 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT PUSH2 0xF53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x37CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xF78 DUP4 PUSH2 0x1E32 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF85 DUP5 PUSH2 0x1E4D JUMP JUMPDEST SWAP1 POP PUSH2 0xF8F PUSH2 0x262E JUMP JUMPDEST PUSH2 0xF9C PUSH1 0x60 DUP14 ADD DUP14 PUSH2 0x3E27 JUMP JUMPDEST SWAP1 POP DUP5 EQ ISZERO PUSH2 0x1026 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP16 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xFE8 SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 PUSH1 0x40 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1012 SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE SWAP1 MSTORE SWAP1 POP PUSH2 0x10D2 JUMP JUMPDEST PUSH2 0x1033 PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x3E6D JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0x103D JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x80 MUL ADD DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1053 SWAP2 SWAP1 PUSH2 0x288D JUMP JUMPDEST SWAP1 POP PUSH2 0x1094 PUSH2 0x1065 PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x3E27 JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x106F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP5 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x1089 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x1E82 JUMP JUMPDEST DUP2 MLOAD MSTORE PUSH2 0x10CB PUSH2 0x10A7 PUSH1 0xC0 DUP15 ADD DUP15 PUSH2 0x3E27 JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x10B1 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x1089 JUMPI INVALID JUMPDEST DUP2 MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST PUSH2 0x10DC DUP6 DUP3 PUSH2 0x1C43 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0xDC0 SWAP2 POP POP JUMP JUMPDEST POP PUSH32 0x49CBB28C69FFBDB6B3893F83D64557662A5DD43FFD6045B6A5180AB0A027F224 CALLER DUP8 PUSH1 0x7 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x1126 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31F4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1184 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x11A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x11D3 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x11EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3B8B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x1222 SWAP1 DUP6 SWAP1 PUSH2 0x1DB6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x1244 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3AE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1274 SWAP1 DUP3 PUSH2 0x1E9B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x12A5 DUP5 DUP4 DUP4 PUSH2 0x1DCA JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x12F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x131B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP3 ADDRESS PUSH2 0x132F PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1355 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x358D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1360 DUP6 PUSH2 0x1BBF JUMP JUMPDEST SWAP1 POP PUSH2 0x1373 DUP5 DUP5 PUSH1 0x7 PUSH1 0x2 ADD SLOAD DUP5 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x137B PUSH2 0x1E15 JUMP JUMPDEST PUSH2 0x1397 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0x13CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3B42 JUMP JUMPDEST DUP2 DUP2 SSTORE PUSH2 0x13DF TIMESTAMP PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH2 0x1C17 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0x87B348A76DD4EF431D45553A1D8C5934DB960E64201A5776AB64E3EB397F4CFA SWAP1 PUSH2 0x1126 SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP6 SWAP1 PUSH2 0x3247 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1461 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1483 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1491 DUP3 PUSH2 0x1F3F JUMP JUMPDEST ISZERO PUSH2 0x14BA JUMPI DUP1 CALLVALUE EQ PUSH2 0x14B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x38FC JUMP JUMPDEST PUSH2 0x1500 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x14D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3975 JUMP JUMPDEST PUSH2 0x14E4 DUP3 CALLER ADDRESS DUP5 PUSH2 0x1F4C JUMP JUMPDEST PUSH2 0x1500 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3884 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x1550 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x15CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH2 0x15D7 DUP3 PUSH2 0x1E32 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1628 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x164A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 PUSH2 0x1657 DUP5 PUSH2 0x1C99 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x16BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x16DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH2 0x15D7 DUP3 PUSH2 0x1E4D JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1730 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1752 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x1766 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x179E JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1793 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x17CC JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x17C1 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3755 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17F3 DUP8 PUSH2 0x1E02 JUMP JUMPDEST SWAP1 POP PUSH2 0x1803 DUP8 DUP3 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1F9F JUMP JUMPDEST PUSH2 0x180B PUSH2 0x1E15 JUMP JUMPDEST ISZERO PUSH2 0x1828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x120 DUP9 ADD CALLDATALOAD GT PUSH2 0x184E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x35F9 JUMP JUMPDEST PUSH2 0x1856 PUSH2 0x20A9 JUMP JUMPDEST PUSH2 0x188A JUMPI PUSH2 0x1869 TIMESTAMP PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH2 0x1C17 JUMP JUMPDEST PUSH1 0xA SSTORE PUSH2 0x1886 PUSH2 0x187F PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH1 0x2 PUSH2 0x20B1 JUMP JUMPDEST TIMESTAMP SWAP1 PUSH2 0x1C17 JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x7 DUP2 DUP2 SSTORE PUSH2 0x120 DUP9 ADD CALLDATALOAD PUSH1 0x8 SSTORE PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH1 0x9 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEF03CF86F2E77E1A0AE5CB25B50519E55B94788B920ACE71F92341DF2DAB97ED SWAP2 PUSH2 0x18D3 SWAP2 CALLER SWAP2 DUP12 SWAP2 PUSH2 0x31C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1934 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1956 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x19BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x19DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1A68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1ADF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1B01 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1B19 PUSH2 0x2673 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1B62 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1B84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x7 SLOAD DUP2 MSTORE PUSH1 0x8 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x9 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xB SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C05 DUP6 DUP6 PUSH2 0x20EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x369E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1C94 JUMPI DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 PUSH1 0x2 DUP2 LT PUSH2 0x1C5F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 POP DUP1 ISZERO PUSH2 0x1C8B JUMPI PUSH2 0x1C8B DUP5 DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x2 DUP2 LT PUSH2 0x1C80 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x2103 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1C46 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3DE9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1CC2 SWAP3 SWAP2 SWAP1 PUSH2 0x33DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1D28 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x1 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x1D44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3B0B JUMP JUMPDEST PUSH2 0x1D92 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x2 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x1DAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3816 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C3C DUP3 PUSH2 0x1DC5 DUP6 PUSH2 0x2164 JUMP JUMPDEST PUSH2 0x21FB JUMP JUMPDEST PUSH2 0x1DD4 DUP4 DUP3 PUSH2 0x2211 JUMP JUMPDEST PUSH2 0x1DDF DUP4 DUP4 DUP4 PUSH2 0x2233 JUMP JUMPDEST PUSH2 0x1C94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3DA4 JUMP JUMPDEST PUSH1 0x0 TIMESTAMP PUSH1 0x7 PUSH1 0x3 ADD SLOAD GT ISZERO DUP1 ISZERO PUSH2 0x1E2D JUMPI POP PUSH1 0xB SLOAD TIMESTAMP LT JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0x1E7A DUP5 PUSH2 0x2164 JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x0 NOT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C3C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x225C JUMP JUMPDEST PUSH2 0x1F1D DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x2288 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F39 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A9E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F96 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1F67 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x333E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2325 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1FB4 SWAP3 SWAP2 SWAP1 PUSH2 0x33DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x201E DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2016 SWAP3 POP POP POP PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST DUP4 SWAP2 SWAP1 PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x203A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3C35 JUMP JUMPDEST PUSH2 0x2084 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2016 SWAP3 POP POP POP PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH2 0x20A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3667 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD TIMESTAMP LT SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x20C0 JUMPI POP PUSH1 0x0 PUSH2 0x15D7 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x20CD JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1C3C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x39FB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x20F7 DUP5 PUSH2 0x23D6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E93 DUP2 DUP5 PUSH2 0x23E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2133 SWAP1 DUP3 PUSH2 0x1E82 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP7 AND DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x216F DUP3 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0x21F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x219F SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x31AD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21EF SWAP2 SWAP1 PUSH2 0x2C9A JUMP JUMPDEST PUSH2 0x15D7 JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x220A JUMPI DUP2 PUSH2 0x1C3C JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x223E DUP5 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0x2252 JUMPI PUSH2 0x224D DUP5 DUP5 DUP5 PUSH2 0x2517 JUMP JUMPDEST PUSH2 0x1E93 JUMP JUMPDEST PUSH2 0x1E93 DUP4 DUP4 PUSH2 0x2524 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x2280 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP2 SWAP1 PUSH2 0x33F7 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x231A JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x22A4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x22E5 JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22C8 SWAP3 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x2311 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22F8 SWAP3 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x228D JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2330 DUP4 PUSH2 0x259C JUMP JUMPDEST PUSH2 0x234C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2368 SWAP2 SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23A5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x23AA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x23B9 DUP3 DUP3 PUSH2 0x25D5 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x1F96 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1F96 SWAP2 SWAP1 PUSH2 0x2855 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3179 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x240C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x351F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x245E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x378C JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x2476 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x2493 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3933 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x24B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3386 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x250D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x340A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E93 DUP5 DUP5 DUP5 PUSH2 0x25E6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2540 SWAP1 PUSH2 0x31AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x257D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2582 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2591 DUP3 DUP3 PUSH2 0x25D5 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x1E93 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x25E2 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E93 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x25FF SWAP3 SWAP2 SWAP1 PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2325 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x2641 PUSH2 0x26A1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x264E PUSH2 0x26A1 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x15D7 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x26DB JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x26F1 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2723 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2739 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2763 JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2763 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2763 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x279D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C3C DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x27BA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x27C5 DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x27D5 DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x27F4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x27FF DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x280F DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x281F DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x283C JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2847 DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2866 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2886 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x289E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x28A8 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x28B6 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x28C0 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x28D2 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x28F3 JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x28D4 JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x2905 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x290F PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x2925 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2950 JUMPI DUP2 CALLDATALOAD PUSH2 0x293B DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2927 JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2970 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x297A PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2988 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2992 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x29A4 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x29C5 JUMPI DUP3 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x29A6 JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x29D7 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x29E1 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x29F7 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2950 JUMPI DUP2 MLOAD PUSH2 0x2A0D DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x29F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2A39 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2A4F JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2A5B DUP10 DUP4 DUP11 ADD PUSH2 0x2751 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2A70 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2A7C DUP10 DUP4 DUP11 ADD PUSH2 0x26CA JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2A94 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2AA1 DUP9 DUP3 DUP10 ADD PUSH2 0x26CA JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2AC9 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2ADF JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2AEB DUP10 DUP4 DUP11 ADD PUSH2 0x2751 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B00 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B0C DUP10 DUP4 DUP11 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B24 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2AA1 DUP9 DUP3 DUP10 ADD PUSH2 0x2712 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A0 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2B46 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2B50 DUP6 DUP6 PUSH2 0x2769 JUMP JUMPDEST SWAP3 POP PUSH2 0x180 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2B6B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2B77 DUP7 DUP3 DUP8 ADD PUSH2 0x26CA JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1E0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2B9F JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2BA9 DUP10 DUP10 PUSH2 0x2769 JUMP JUMPDEST SWAP7 POP PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2BC5 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x2BD1 DUP12 DUP4 DUP13 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x1A0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2BEA JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2BF6 DUP12 DUP4 DUP13 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1C0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C0F JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x2C1C DUP11 DUP3 DUP12 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C40 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C55 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1E93 DUP5 DUP3 DUP6 ADD PUSH2 0x277B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2C78 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2C8E JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2AEB DUP10 DUP4 DUP11 ADD PUSH2 0x277B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CAB JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2CFC JUMPI DUP2 CALLDATALOAD PUSH2 0x2CE1 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2CCE JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2CFC JUMPI PUSH1 0x40 DUP1 DUP4 DUP10 CALLDATACOPY DUP8 DUP2 ADD DUP6 DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP6 SWAP1 JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x2D62 JUMPI DUP3 CALLDATALOAD PUSH2 0x2D45 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP6 ADD PUSH2 0x2D31 JUMP JUMPDEST POP POP POP PUSH1 0x80 SWAP7 DUP8 ADD SWAP7 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D16 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x2D90 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x20 DUP4 MUL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2DEE DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3F80 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 PUSH1 0x40 DUP4 DUP2 ADD DUP3 DUP2 MSTORE SWAP1 DUP4 ADD SWAP2 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E47 JUMPI PUSH1 0x20 DUP4 CALLDATALOAD PUSH2 0x2E2C DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2E16 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 PUSH1 0x20 DUP4 ADD PUSH2 0x2E98 DUP6 PUSH2 0x2E93 DUP4 DUP8 PUSH2 0x26BF JUMP JUMPDEST PUSH2 0x2CB2 JUMP JUMPDEST PUSH2 0x2EA2 DUP2 DUP6 PUSH2 0x3ED9 JUMP JUMPDEST SWAP1 POP PUSH2 0x2EB1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x2EBF PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x2ECC PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x2EDA PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x2EED DUP4 DUP8 ADD DUP3 DUP5 PUSH2 0x2CBF JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2EFE PUSH1 0x80 DUP5 ADD DUP5 PUSH2 0x3F2D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x2F11 DUP4 DUP3 DUP5 PUSH2 0x2D07 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2F22 PUSH1 0xA0 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x2F35 DUP4 DUP3 DUP5 PUSH2 0x2D78 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2F46 PUSH1 0xC0 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x2F59 DUP4 DUP3 DUP5 PUSH2 0x2D78 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2F6A PUSH1 0xE0 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x2F7D DUP4 DUP3 DUP5 PUSH2 0x2D78 JUMP JUMPDEST PUSH2 0x100 DUP7 DUP2 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x120 DUP1 DUP8 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP6 DUP7 ADD CALLDATALOAD SWAP6 SWAP1 SWAP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2FB6 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 PUSH2 0x2FDC DUP3 PUSH2 0x3FAC JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2FEF PUSH1 0x60 DUP3 ADD DUP3 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x2FFC PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x300A PUSH1 0x80 DUP3 ADD DUP3 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x3017 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x3025 PUSH1 0xA0 DUP3 ADD DUP3 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x3032 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x3043 PUSH1 0xC0 DUP4 ADD PUSH1 0xC0 DUP4 ADD PUSH2 0x2E02 JUMP JUMPDEST PUSH2 0x140 DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH2 0x3086 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP5 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x30A2 DUP3 PUSH2 0x3FAC JUMP JUMPDEST SWAP1 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x30B9 DUP3 PUSH2 0x3FAC JUMP JUMPDEST DUP1 DUP3 AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x30E5 DUP3 PUSH2 0x3FAC JUMP JUMPDEST AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD CALLDATASIZE DUP4 SWAP1 SUB PUSH1 0x1E NOT ADD DUP2 SLT PUSH2 0x3102 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3119 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x3127 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xE0 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x1F96 PUSH1 0xE0 DUP7 ADD DUP3 PUSH1 0x20 DUP6 ADD PUSH2 0x2DAC JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x316F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3F80 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x31E5 SWAP1 DUP4 ADD DUP6 PUSH2 0x2E7C JUMP JUMPDEST SWAP1 POP PUSH2 0x1E93 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2E4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3219 DUP4 DUP3 ADD DUP9 PUSH2 0x2E7C JUMP JUMPDEST SWAP1 POP PUSH2 0x3228 PUSH1 0x40 DUP5 ADD DUP8 PUSH2 0x2E4E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x323B DUP2 DUP6 DUP8 PUSH2 0x2CBF JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH2 0x200 DUP2 ADD PUSH2 0x3265 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0x1E93 PUSH2 0x1A0 DUP4 ADD DUP5 PUSH2 0x305A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x0 PUSH2 0x2C0 PUSH1 0x20 PUSH2 0x3292 DUP2 DUP6 ADD DUP13 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0x32A0 PUSH2 0x1A0 DUP6 ADD DUP12 PUSH2 0x305A JUMP JUMPDEST DUP2 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x32B4 DUP3 DUP6 ADD DUP10 DUP12 PUSH2 0x2DAC JUMP JUMPDEST SWAP2 POP DUP4 DUP3 SUB PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x32CA DUP3 DUP8 DUP10 PUSH2 0x2DAC JUMP JUMPDEST DUP6 MLOAD SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x0 PUSH2 0x240 DUP6 ADD JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x32F8 JUMPI DUP4 MLOAD DUP2 MSTORE SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP3 ADD PUSH2 0x32D9 JUMP JUMPDEST POP POP DUP1 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x280 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x332D JUMPI PUSH2 0x331B DUP5 MLOAD PUSH2 0x3F74 JUMP JUMPDEST DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3308 JUMP JUMPDEST POP POP POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x33B7 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x2DD6 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x33CA DUP2 DUP8 DUP10 PUSH2 0x2DAC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x323B DUP2 DUP6 DUP8 PUSH2 0x2DAC JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x33ED JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C3C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2DD6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C5F PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x9082A69 PUSH1 0xE3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E4445585F4D49534D415443480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A204348414E4E454C5F4D49534D41544348000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x434D4357697468647261773A204E4F5F4F5 PUSH1 0x74 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5048415345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4E4F4E4345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F424F425F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D111519553911151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204E4F5F4153534554535F474956454E00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204348414E4E454C5F414C52454144595F PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1111519553911151 PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F424F425F53494700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20414C52454144595F4558454355544544000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F4E4F545F444953 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1415551151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4D45524B4C455F50 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x2927A7A3 PUSH1 0xE1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F414C4943455F5349470000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D11254D415551151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A2057524F4E475F41525241595F4C454E47 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x544853 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F414C4943455F5349 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x47 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5245534F4C564552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F42414C414E434553 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0xBE9082A69 PUSH1 0xDB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x15D7 DUP3 DUP5 PUSH2 0x2E02 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C3C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2E7C JUMP JUMPDEST PUSH2 0x180 DUP2 ADD PUSH2 0x15D7 DUP3 DUP5 PUSH2 0x2FAB JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C3C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3079 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x3E0F PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3079 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3E3D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3E56 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP2 ADD SWAP3 POP DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3E83 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3E9C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3ED1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x1C3C DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3EFC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3F1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3F43 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3F62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F9B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F83 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1F39 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3FC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC JUMPI PUSH2 0xA7A2 DIFFICULTY 0xEA ADD ORIGIN STATICCALL DIFFICULTY 0xDD 0xDC CREATE 0xE7 0xDB DUP11 SMOD 0xD9 0x5D 0xB5 0xEA 0xE2 PUSH31 0x73FFF5D050F1145C64736F6C63430007010033000000000000000000000000 ",
              "sourceMap": "635:133:16:-:0;;;;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;635:133:16;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 296
                  },
                  {
                    "length": 32,
                    "start": 1051
                  },
                  {
                    "length": 32,
                    "start": 1991
                  },
                  {
                    "length": 32,
                    "start": 2114
                  },
                  {
                    "length": 32,
                    "start": 2678
                  },
                  {
                    "length": 32,
                    "start": 2964
                  },
                  {
                    "length": 32,
                    "start": 3133
                  },
                  {
                    "length": 32,
                    "start": 4422
                  },
                  {
                    "length": 32,
                    "start": 4795
                  },
                  {
                    "length": 32,
                    "start": 5155
                  },
                  {
                    "length": 32,
                    "start": 5486
                  },
                  {
                    "length": 32,
                    "start": 5610
                  },
                  {
                    "length": 32,
                    "start": 5758
                  },
                  {
                    "length": 32,
                    "start": 5874
                  },
                  {
                    "length": 32,
                    "start": 6390
                  },
                  {
                    "length": 32,
                    "start": 6527
                  },
                  {
                    "length": 32,
                    "start": 6664
                  },
                  {
                    "length": 32,
                    "start": 6817
                  },
                  {
                    "length": 32,
                    "start": 6948
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106101185760003560e01c80636f33389e116100a0578063e7283a8d11610064578063e7283a8d14610384578063e9852569146103a4578063eeb30fea146103c4578063f19eb10e146103d9578063f83d08ba146103fb57610198565b80636f33389e146102ca5780638c048fc2146102f7578063b081e9c814610324578063c60939be14610344578063cefa51221461036457610198565b80633ff0da16116100e75780633ff0da161461022a5780634d3fcbda146102575780635bc9d96d146102775780635fd334d914610297578063635ae901146102b757610198565b8063072f25fd1461019d578063241686a0146101bf5780632c889aa1146101ea5780632d34ba791461020a57610198565b3661019857306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561016f5760405162461bcd60e51b815260040161016690613cab565b60405180910390fd5b6001600054146101915760405162461bcd60e51b815260040161016690613a67565b6001600055005b600080fd5b3480156101a957600080fd5b506101bd6101b8366004612b84565b610410565b005b3480156101cb57600080fd5b506101d46107ba565b6040516101e191906131ad565b60405180910390f35b3480156101f657600080fd5b506101bd610205366004612c61565b610837565b34801561021657600080fd5b506101bd6102253660046127a8565b610a6b565b34801561023657600080fd5b5061024a610245366004612875565b610b81565b6040516101e19190613dc6565b34801561026357600080fd5b506101bd610272366004612a22565b610c32565b34801561028357600080fd5b506101bd6102923660046127e0565b61113b565b3480156102a357600080fd5b506101bd6102b2366004612b31565b6112b0565b6101bd6102c536600461282a565b611418565b3480156102d657600080fd5b506102ea6102e536600461278c565b611561565b6040516101e19190613e1e565b34801561030357600080fd5b50610317610312366004612c2f565b6115dd565b6040516101e1919061337b565b34801561033057600080fd5b506102ea61033f36600461278c565b611671565b34801561035057600080fd5b506101bd61035f366004612ab2565b6116e7565b34801561037057600080fd5b506102ea61037f36600461278c565b6118e9565b34801561039057600080fd5b506102ea61039f36600461278c565b611972565b3480156103b057600080fd5b506102ea6103bf3660046127a8565b6119fb565b3480156103d057600080fd5b506101d4611a94565b3480156103e557600080fd5b506103ee611b11565b6040516101e19190613d6a565b34801561040757600080fd5b506102ea611bb9565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104595760405162461bcd60e51b815260040161016690613cab565b60016000541461047b5760405162461bcd60e51b815260040161016690613a67565b6002600055863061048f602083018361278c565b6001600160a01b0316146104b55760405162461bcd60e51b81526004016101669061358d565b6020808901356000908152600d9091526040902060018101546104ea5760405162461bcd60e51b8152600401610166906139b6565b80546104f58a611bbf565b146105125760405162461bcd60e51b815260040161016690613d17565b600281015460ff16156105375760405162461bcd60e51b8152600401610166906136d5565b60028101805460ff1916600117905561054e61262e565b816001015442101561073657896101600135898960405161057092919061314d565b6040518091039020146105955760405162461bcd60e51b815260040161016690613d17565b6105a560a08b0160808c0161278c565b6001600160a01b0316336001600160a01b03161480610616575061061685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106099250505060a08d0160808e0161278c565b6101608d01359190611bef565b6106325760405162461bcd60e51b815260040161016690613c76565b600061064460608c0160408d0161278c565b9050806001600160a01b0316638ef98a7e8c60c0016040516020016106699190613d5c565b6040516020818303038152906040528c8c8c8c6040518663ffffffff1660e01b815260040161069c9594939291906133a4565b60806040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061295f565b915061070060c08c013560e08d0135611c17565b82516020810151905161071291611c17565b11156107305760405162461bcd60e51b815260040161016690613ce2565b5061074b565b610748368b90038b0160c08c0161288d565b90505b61076461075e60c08c0160a08d0161278c565b82611c43565b7f93f6b8187e81bd7d01ce234c043cd6ae4feda2e2ae91daae0962c68a656da8c7338b848c8c8c8c886040516107a1989796959493929190613273565b60405180910390a1505060016000555050505050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108055760405162461bcd60e51b815260040161016690613cab565b6001600054146108275760405162461bcd60e51b815260040161016690613a67565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108805760405162461bcd60e51b815260040161016690613cab565b6001600054146108a25760405162461bcd60e51b815260040161016690613a67565b600260005584306108b6602083018361278c565b6001600160a01b0316146108dc5760405162461bcd60e51b8152600401610166906134bc565b60006108e787611c99565b90506108f68187878787611cac565b60008181526006602052604090205460ff16156109255760405162461bcd60e51b8152600401610166906138c5565b6000818152600660209081526040808320805460ff1916600117905561095d91610953918b01908b0161278c565b8960600135611db6565b905060008111806109875750600061097b60c08a0160a08b0161278c565b6001600160a01b031614155b6109a35760405162461bcd60e51b8152600401610166906134f3565b6109cc6109b660408a0160208b0161278c565b6109c660608b0160408c0161278c565b83611dca565b60006109de60c08a0160a08b0161278c565b6001600160a01b031614610a5c576109fc60c0890160a08a0161278c565b6001600160a01b031663f50cd32c89836040518363ffffffff1660e01b8152600401610a29929190613dfc565b600060405180830381600087803b158015610a4357600080fd5b505af1158015610a57573d6000803e3d6000fd5b505050505b50506001600055505050505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610ab45760405162461bcd60e51b815260040161016690613cab565b6001546001600160a01b031615610add5760405162461bcd60e51b815260040161016690613bc2565b6001600160a01b03821615801590610afd57506001600160a01b03811615155b610b195760405162461bcd60e51b81526004016101669061384d565b806001600160a01b0316826001600160a01b03161415610b4b5760405162461bcd60e51b8152600401610166906135c2565b610b53611dfb565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b610b89612653565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610bd25760405162461bcd60e51b815260040161016690613cab565b600160005414610bf45760405162461bcd60e51b815260040161016690613a67565b506000908152600d60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610c7b5760405162461bcd60e51b815260040161016690613cab565b600160005414610c9d5760405162461bcd60e51b815260040161016690613a67565b60026000558430610cb1602083018361278c565b6001600160a01b0316148015610ce957506001546001600160a01b0316610cde604083016020840161278c565b6001600160a01b0316145b8015610d1757506002546001600160a01b0316610d0c606083016040840161278c565b6001600160a01b0316145b610d335760405162461bcd60e51b815260040161016690613755565b83610d505760405162461bcd60e51b81526004016101669061371e565b83821115610d705760405162461bcd60e51b815260040161016690613bf2565b600754610d7c87611e02565b14610d995760405162461bcd60e51b815260040161016690613441565b610da1611e15565b610dbd5760405162461bcd60e51b815260040161016690613556565b60005b848110156110ed576000868683818110610dd657fe5b9050602002016020810190610deb919061278c565b9050600084831015610e7057858584818110610e0357fe5b905060200201359050888060600190610e1c9190613e27565b82818110610e2657fe5b9050602002016020810190610e3b919061278c565b6001600160a01b0316826001600160a01b031614610e6b5760405162461bcd60e51b815260040161016690613485565b610edc565b5060005b610e8160608a018a613e27565b9050811015610edc57610e9760608a018a613e27565b82818110610ea157fe5b9050602002016020810190610eb6919061278c565b6001600160a01b0316826001600160a01b03161415610ed457610edc565b600101610e74565b6000610eeb60608b018b613e27565b90508214610f1657610f0060e08b018b613e27565b83818110610f0a57fe5b90506020020135610f19565b60015b6001600160a01b0384166000908152600c60205260409020549091508111610f535760405162461bcd60e51b8152600401610166906137ce565b6001600160a01b0383166000908152600c6020526040812091909155610f7883611e32565b90506000610f8584611e4d565b9050610f8f61262e565b610f9c60608d018d613e27565b9050841415611026576040518060400160405280604051806040016040528086815260200185815250815260200160405180604001604052808f6020016020810190610fe8919061278c565b6001600160a01b03166001600160a01b031681526020018f6040016020810190611012919061278c565b6001600160a01b03169052905290506110d2565b61103360808d018d613e6d565b8581811061103d57fe5b905060800201803603810190611053919061288d565b905061109461106560a08e018e613e27565b8681811061106f57fe5b905060200201358403826000015160006002811061108957fe5b602002015190611e82565b8151526110cb6110a760c08e018e613e27565b868181106110b157fe5b905060200201358303826000015160016002811061108957fe5b8151602001525b6110dc8582611c43565b505060019093019250610dc0915050565b507f49cbb28c69ffbdb6b3893f83d64557662a5dd43ffd6045b6a5180ab0a027f2243387600788886040516111269594939291906131f4565b60405180910390a15050600160005550505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111845760405162461bcd60e51b815260040161016690613cab565b6001600054146111a65760405162461bcd60e51b815260040161016690613a67565b6002600055336001600160a01b03831614806111d35750806001600160a01b0316826001600160a01b0316145b6111ef5760405162461bcd60e51b815260040161016690613b8b565b6001600160a01b038084166000908152600460209081526040808320938616835292905290812054611222908590611db6565b9050600081116112445760405162461bcd60e51b815260040161016690613ae2565b6001600160a01b038085166000908152600460209081526040808320938716835292905220546112749082611e9b565b6001600160a01b038086166000908152600460209081526040808320938816835292905220556112a5848383611dca565b505060016000555050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156112f95760405162461bcd60e51b815260040161016690613cab565b60016000541461131b5760405162461bcd60e51b815260040161016690613a67565b6002600055823061132f602083018361278c565b6001600160a01b0316146113555760405162461bcd60e51b81526004016101669061358d565b600061136085611bbf565b9050611373848460076002015484611edd565b61137b611e15565b6113975760405162461bcd60e51b815260040161016690613556565b6020808601356000908152600d909152604090206001810154156113cd5760405162461bcd60e51b815260040161016690613b42565b8181556113df42610140880135611c17565b60018201556040517f87b348a76dd4ef431d45553a1d8c5934db960e64201a5776ab64e3eb397f4cfa9061112690339089908590613247565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114615760405162461bcd60e51b815260040161016690613cab565b6001600054146114835760405162461bcd60e51b815260040161016690613a67565b600260005561149182611f3f565b156114ba578034146114b55760405162461bcd60e51b8152600401610166906138fc565b611500565b34156114d85760405162461bcd60e51b815260040161016690613975565b6114e482333084611f4c565b6115005760405162461bcd60e51b815260040161016690613884565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906115509084908490613362565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115ac5760405162461bcd60e51b815260040161016690613cab565b6001600054146115ce5760405162461bcd60e51b815260040161016690613a67565b6115d782611e32565b92915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116285760405162461bcd60e51b815260040161016690613cab565b60016000541461164a5760405162461bcd60e51b815260040161016690613a67565b6006600061165784611c99565b815260208101919091526040016000205460ff1692915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116bc5760405162461bcd60e51b815260040161016690613cab565b6001600054146116de5760405162461bcd60e51b815260040161016690613a67565b6115d782611e4d565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117305760405162461bcd60e51b815260040161016690613cab565b6001600054146117525760405162461bcd60e51b815260040161016690613a67565b60026000558430611766602083018361278c565b6001600160a01b031614801561179e57506001546001600160a01b0316611793604083016020840161278c565b6001600160a01b0316145b80156117cc57506002546001600160a01b03166117c1606083016040840161278c565b6001600160a01b0316145b6117e85760405162461bcd60e51b815260040161016690613755565b60006117f387611e02565b9050611803878288888888611f9f565b61180b611e15565b156118285760405162461bcd60e51b815260040161016690613556565b6008546101208801351161184e5760405162461bcd60e51b8152600401610166906135f9565b6118566120a9565b61188a5761186942610100890135611c17565b600a5561188661187f61010089013560026120b1565b4290611c17565b600b555b60078181556101208801356008556101408801356009556040517fef03cf86f2e77e1a0ae5cb25b50519e55b94788b920ace71f92341df2dab97ed916118d39133918b916131c1565b60405180910390a1505060016000555050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156119345760405162461bcd60e51b815260040161016690613cab565b6001600054146119565760405162461bcd60e51b815260040161016690613a67565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156119bd5760405162461bcd60e51b815260040161016690613cab565b6001600054146119df5760405162461bcd60e51b815260040161016690613a67565b506001600160a01b03166000908152600c602052604090205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611a465760405162461bcd60e51b815260040161016690613cab565b600160005414611a685760405162461bcd60e51b815260040161016690613a67565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611adf5760405162461bcd60e51b815260040161016690613cab565b600160005414611b015760405162461bcd60e51b815260040161016690613a67565b506001546001600160a01b031690565b611b19612673565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611b625760405162461bcd60e51b815260040161016690613cab565b600160005414611b845760405162461bcd60e51b815260040161016690613a67565b506040805160a0810182526007548152600854602082015260095491810191909152600a546060820152600b54608082015290565b60005481565b600081604051602001611bd29190613db7565b604051602081830303815290604052805190602001209050919050565b6000816001600160a01b0316611c0585856120eb565b6001600160a01b031614949350505050565b600082820183811015611c3c5760405162461bcd60e51b81526004016101669061369e565b9392505050565b60005b6002811015611c945781516000908260028110611c5f57fe5b602002015190508015611c8b57611c8b8484602001518460028110611c8057fe5b602002015183612103565b50600101611c46565b505050565b600081604051602001611bd29190613de9565b6000600186604051602001611cc29291906133df565b604051602081830303815290604052805190602001209050611d2885858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600154859392506001600160a01b03169050611bef565b611d445760405162461bcd60e51b815260040161016690613b0b565b611d9283838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600254859392506001600160a01b03169050611bef565b611dae5760405162461bcd60e51b815260040161016690613816565b505050505050565b6000611c3c82611dc585612164565b6121fb565b611dd48382612211565b611ddf838383612233565b611c945760405162461bcd60e51b815260040161016690613630565b6001600055565b600081604051602001611bd29190613da4565b60004260076003015411158015611e2d5750600b5442105b905090565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b0381166000908152600560209081526040808320546003909252822054611e7a84612164565b010392915050565b600082820183811015611c3c576000195b949350505050565b6000611c3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061225c565b611f1d8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692508591506122889050565b611f395760405162461bcd60e51b815260040161016690613a9e565b50505050565b6001600160a01b03161590565b6000611f9685858585604051602401611f679392919061333e565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052612325565b95945050505050565b60008086604051602001611fb49291906133df565b60405160208183030381529060405280519060200120905061201e85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120169250505060408a0160208b0161278c565b839190611bef565b61203a5760405162461bcd60e51b815260040161016690613c35565b61208483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120169250505060608a0160408b0161278c565b6120a05760405162461bcd60e51b815260040161016690613667565b50505050505050565b600a54421090565b6000826120c0575060006115d7565b828202828482816120cd57fe5b0414611c3c5760405162461bcd60e51b8152600401610166906139fb565b6000806120f7846123d6565b9050611e9381846123e9565b6001600160a01b038084166000908152600460209081526040808320938616835292905220546121339082611e82565b6001600160a01b03938416600090815260046020908152604080832095909616825293909352929091209190915550565b600061216f82611f3f565b6121f4576040516370a0823160e01b81526001600160a01b038316906370a082319061219f9030906004016131ad565b60206040518083038186803b1580156121b757600080fd5b505afa1580156121cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ef9190612c9a565b6115d7565b5047919050565b600081831061220a5781611c3c565b5090919050565b6001600160a01b03909116600090815260036020526040902080549091019055565b600061223e84611f3f565b6122525761224d848484612517565b611e93565b611e938383612524565b600081848411156122805760405162461bcd60e51b815260040161016691906133f7565b505050900390565b600081815b855181101561231a5760008682815181106122a457fe5b602002602001015190508083116122e55782816040516020016122c892919061313f565b604051602081830303815290604052805190602001209250612311565b80836040516020016122f892919061313f565b6040516020818303038152906040528051906020012092505b5060010161228d565b509092149392505050565b60006123308361259c565b61234c5760405162461bcd60e51b815260040161016690613a3c565b60006060846001600160a01b031684604051612368919061315d565b6000604051808303816000865af19150503d80600081146123a5576040519150601f19603f3d011682016040523d82523d6000602084013e6123aa565b606091505b50915091506123b982826125d5565b80511580611f96575080806020019051810190611f969190612855565b600081604051602001611bd29190613179565b6000815160411461240c5760405162461bcd60e51b81526004016101669061351f565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561245e5760405162461bcd60e51b81526004016101669061378c565b8060ff16601b1415801561247657508060ff16601c14155b156124935760405162461bcd60e51b815260040161016690613933565b6000600187838686604051600081526020016040526040516124b89493929190613386565b6020604051602081039080840390855afa1580156124da573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661250d5760405162461bcd60e51b81526004016101669061340a565b9695505050505050565b6000611e938484846125e6565b6000806060846001600160a01b031684604051612540906131aa565b60006040518083038185875af1925050503d806000811461257d576040519150601f19603f3d011682016040523d82523d6000602084013e612582565b606091505b509150915061259182826125d5565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611e93575050151592915050565b816125e257805160208201fd5b5050565b6000611e938484846040516024016125ff929190613362565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052612325565b60405180604001604052806126416126a1565b815260200161264e6126a1565b905290565b604080516060810182526000808252602082018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806002906020820280368337509192915050565b80356115d781613fac565b60008083601f8401126126db578182fd5b5081356001600160401b038111156126f1578182fd5b602083019150836020808302850101111561270b57600080fd5b9250929050565b60008083601f840112612723578182fd5b5081356001600160401b03811115612739578182fd5b60208301915083602082850101111561270b57600080fd5b60006101608284031215612763578081fd5b50919050565b60006101808284031215612763578081fd5b600060e08284031215612763578081fd5b60006020828403121561279d578081fd5b8135611c3c81613fac565b600080604083850312156127ba578081fd5b82356127c581613fac565b915060208301356127d581613fac565b809150509250929050565b6000806000606084860312156127f4578081fd5b83356127ff81613fac565b9250602084013561280f81613fac565b9150604084013561281f81613fac565b809150509250925092565b6000806040838503121561283c578182fd5b823561284781613fac565b946020939093013593505050565b600060208284031215612866578081fd5b81518015158114611c3c578182fd5b600060208284031215612886578081fd5b5035919050565b60006080828403121561289e578081fd5b6128a86040613eb3565b83601f8401126128b6578182fd5b6128c06040613eb3565b808460408601878111156128d2578586fd5b855b60028110156128f35782358552602094850194909201916001016128d4565b5082855287605f880112612905578586fd5b61290f6040613eb3565b9350839250905060808601871015612925578485fd5b845b600281101561295057813561293b81613fac565b84526020938401939190910190600101612927565b50506020830152509392505050565b600060808284031215612970578081fd5b61297a6040613eb3565b83601f840112612988578182fd5b6129926040613eb3565b808460408601878111156129a4578586fd5b855b60028110156129c55782518552602094850194909201916001016129a6565b5082855287605f8801126129d7578586fd5b6129e16040613eb3565b93508392509050608086018710156129f7578485fd5b845b6002811015612950578151612a0d81613fac565b845260209384019391909101906001016129f9565b600080600080600060608688031215612a39578283fd5b85356001600160401b0380821115612a4f578485fd5b612a5b89838a01612751565b96506020880135915080821115612a70578485fd5b612a7c89838a016126ca565b90965094506040880135915080821115612a94578283fd5b50612aa1888289016126ca565b969995985093965092949392505050565b600080600080600060608688031215612ac9578283fd5b85356001600160401b0380821115612adf578485fd5b612aeb89838a01612751565b96506020880135915080821115612b00578485fd5b612b0c89838a01612712565b90965094506040880135915080821115612b24578283fd5b50612aa188828901612712565b60008060006101a08486031215612b46578081fd5b612b508585612769565b92506101808401356001600160401b03811115612b6b578182fd5b612b77868287016126ca565b9497909650939450505050565b60008060008060008060006101e0888a031215612b9f578485fd5b612ba98989612769565b96506101808801356001600160401b0380821115612bc5578687fd5b612bd18b838c01612712565b90985096506101a08a0135915080821115612bea578384fd5b612bf68b838c01612712565b90965094506101c08a0135915080821115612c0f578384fd5b50612c1c8a828b01612712565b989b979a50959850939692959293505050565b600060208284031215612c40578081fd5b81356001600160401b03811115612c55578182fd5b611e938482850161277b565b600080600080600060608688031215612c78578283fd5b85356001600160401b0380821115612c8e578485fd5b612aeb89838a0161277b565b600060208284031215612cab578081fd5b5051919050565b6001600160a01b03169052565b60008284526020808501945082825b85811015612cfc578135612ce181613fac565b6001600160a01b031687529582019590820190600101612cce565b509495945050505050565b60008284526020808501945082825b85811015612cfc576040808389378781018581529083019085905b6002821015612d62578235612d4581613fac565b6001600160a01b0316815291850191600191909101908501612d31565b5050506080968701969190910190600101612d16565b81835260006001600160fb1b03831115612d90578081fd5b6020830280836020870137939093016020019283525090919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612dee816020860160208601613f80565b601f01601f19169290920160200192915050565b604081833760006040838101828152908301915b6002811015612e475760208335612e2c81613fac565b6001600160a01b031683529283019290910190600101612e16565b5050505050565b8054825260018101546020830152600281015460408301526003810154606083015260040154608090910152565b600061016060208301612e9885612e9383876126bf565b612cb2565b612ea28185613ed9565b9050612eb16020860182612cb2565b50612ebf6040840184613ed9565b612ecc6040860182612cb2565b50612eda6060840184613ee6565b826060870152612eed8387018284612cbf565b92505050612efe6080840184613f2d565b8583036080870152612f11838284612d07565b92505050612f2260a0840184613ee6565b85830360a0870152612f35838284612d78565b92505050612f4660c0840184613ee6565b85830360c0870152612f59838284612d78565b92505050612f6a60e0840184613ee6565b85830360e0870152612f7d838284612d78565b6101008681013590880152610120808701359088015261014095860135959096019490945250929392505050565b8035612fb681613fac565b6001600160a01b03908116835260208281013590840152604082013590612fdc82613fac565b166040830152612fef6060820182613ed9565b612ffc6060840182612cb2565b5061300a6080820182613ed9565b6130176080840182612cb2565b5061302560a0820182613ed9565b61303260a0840182612cb2565b5061304360c0830160c08301612e02565b610140818101359083015261016090810135910152565b80548252600181015460208301526002015460ff161515604090910152565b6000813561308681613fac565b6001600160a01b0390811684526020830135906130a282613fac565b90811660208501526040830135906130b982613fac565b8082166040860152606084013560608601526080840135608086015260a084013591506130e582613fac565b1660a084015260c082013536839003601e19018112613102578182fd5b820180356001600160401b03811115613119578283fd5b803603841315613127578283fd5b60e060c0860152611f9660e086018260208501612dac565b918252602082015260400190565b6000828483379101908152919050565b6000825161316f818460208701613f80565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260e0602082018190526000906131e590830185612e7c565b9050611e936040830184612e4e565b6001600160a01b03861681526101006020820181905260009061321983820188612e7c565b90506132286040840187612e4e565b82810360e084015261323b818587612cbf565b98975050505050505050565b6001600160a01b038416815261020081016132656020830185612fab565b611e936101a083018461305a565b6001600160a01b038916815260006102c060206132928185018c612fab565b6132a06101a085018b61305a565b816102008501526132b4828501898b612dac565b91508382036102208501526132ca828789612dac565b85519093509150600061024085015b60028210156132f85783518152928201926001919091019082016132d9565b5050808501519150610280840160005b600281101561332d5761331b8451613f74565b82529282019290820190600101613308565b505050509998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000606082526133b76060830188612dd6565b82810360208401526133ca818789612dac565b9050828103604084015261323b818587612dac565b60408101600284106133ed57fe5b9281526020015290565b600060208252611c3c6020830184612dd6565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f60408201526309082a6960e31b606082015260800190565b6020808252601e908201527f434d4341646a7564696361746f723a20494e4445585f4d49534d415443480000604082015260600190565b6020808252601d908201527f434d4357697468647261773a204348414e4e454c5f4d49534d41544348000000604082015260600190565b6020808252601290820152710434d4357697468647261773a204e4f5f4f560741b604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f5048415345000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345000000604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f424f425f53494700604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11151955391115160ba1b606082015260800190565b6020808252601f908201527f434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e00604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c00604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526028908201527f434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f604082015267111151955391115160c21b606082015260800190565b6020808252601c908201527f434d4357697468647261773a20494e56414c49445f424f425f53494700000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601d908201527f434d4357697468647261773a20414c52454144595f4558454355544544000000604082015260600190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b60208082526025908201527f434d4341646a7564696361746f723a205452414e534645525f4e4f545f444953604082015264141555115160da1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f506040820152632927a7a360e11b606082015260800190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b6020808252601e908201527f434d4357697468647261773a20494e56414c49445f414c4943455f5349470000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11254d41555115160ba1b606082015260800190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b60208082526023908201527f434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e4760408201526254485360e81b606082015260800190565b60208082526021908201527f434d4341646a7564696361746f723a20494e56414c49445f414c4943455f53496040820152604760f81b606082015260800190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553604082015260600190565b60208082526025908201527f434d4341646a7564696361746f723a20494e56414c49445f5452414e534645526040820152640be9082a6960db1b606082015260800190565b608081016115d78284612e02565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b600060208252611c3c6020830184612e7c565b61018081016115d78284612fab565b815181526020808301519082015260409182015115159181019190915260600190565b600060208252611c3c6020830184613079565b600060408252613e0f6040830185613079565b90508260208301529392505050565b90815260200190565b6000808335601e19843603018112613e3d578283fd5b8301803591506001600160401b03821115613e56578283fd5b602090810192508102360382131561270b57600080fd5b6000808335601e19843603018112613e83578283fd5b8301803591506001600160401b03821115613e9c578283fd5b602001915060808102360382131561270b57600080fd5b6040518181016001600160401b0381118282101715613ed157600080fd5b604052919050565b60008235611c3c81613fac565b6000808335601e19843603018112613efc578283fd5b83016020810192503590506001600160401b03811115613f1b57600080fd5b60208102360383131561270b57600080fd5b6000808335601e19843603018112613f43578283fd5b83016020810192503590506001600160401b03811115613f6257600080fd5b60808102360383131561270b57600080fd5b6001600160a01b031690565b60005b83811015613f9b578181015183820152602001613f83565b83811115611f395750506000910152565b6001600160a01b0381168114613fc157600080fd5b5056fea26469706673582212200c5761a7a244ea0132fa44dddcf0e7db8a07d95db5eae27e73fff5d050f1145c64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x118 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F33389E GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE7283A8D GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE7283A8D EQ PUSH2 0x384 JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0xF19EB10E EQ PUSH2 0x3D9 JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x3FB JUMPI PUSH2 0x198 JUMP JUMPDEST DUP1 PUSH4 0x6F33389E EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0x8C048FC2 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0xC60939BE EQ PUSH2 0x344 JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x364 JUMPI PUSH2 0x198 JUMP JUMPDEST DUP1 PUSH4 0x3FF0DA16 GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x3FF0DA16 EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x4D3FCBDA EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x5FD334D9 EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x2B7 JUMPI PUSH2 0x198 JUMP JUMPDEST DUP1 PUSH4 0x72F25FD EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0x241686A0 EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0x2C889AA1 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x20A JUMPI PUSH2 0x198 JUMP JUMPDEST CALLDATASIZE PUSH2 0x198 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x16F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x191 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x1B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B84 JUMP JUMPDEST PUSH2 0x410 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D4 PUSH2 0x7BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x31AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C61 JUMP JUMPDEST PUSH2 0x837 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x225 CALLDATASIZE PUSH1 0x4 PUSH2 0x27A8 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24A PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0x2875 JUMP JUMPDEST PUSH2 0xB81 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A22 JUMP JUMPDEST PUSH2 0xC32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x27E0 JUMP JUMPDEST PUSH2 0x113B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x2B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B31 JUMP JUMPDEST PUSH2 0x12B0 JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x2C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x282A JUMP JUMPDEST PUSH2 0x1418 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x3E1E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x317 PUSH2 0x312 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C2F JUMP JUMPDEST PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x337B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x33F CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x1671 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BD PUSH2 0x35F CALLDATASIZE PUSH1 0x4 PUSH2 0x2AB2 JUMP JUMPDEST PUSH2 0x16E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x18E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x278C JUMP JUMPDEST PUSH2 0x1972 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x3BF CALLDATASIZE PUSH1 0x4 PUSH2 0x27A8 JUMP JUMPDEST PUSH2 0x19FB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D4 PUSH2 0x1A94 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EE PUSH2 0x1B11 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x3D6A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EA PUSH2 0x1BB9 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x459 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x47B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP7 ADDRESS PUSH2 0x48F PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x4B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x358D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x39B6 JUMP JUMPDEST DUP1 SLOAD PUSH2 0x4F5 DUP11 PUSH2 0x1BBF JUMP JUMPDEST EQ PUSH2 0x512 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3D17 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x537 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x36D5 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x54E PUSH2 0x262E JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x736 JUMPI DUP10 PUSH2 0x160 ADD CALLDATALOAD DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0x570 SWAP3 SWAP2 SWAP1 PUSH2 0x314D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 EQ PUSH2 0x595 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3D17 JUMP JUMPDEST PUSH2 0x5A5 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x616 JUMPI POP PUSH2 0x616 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x609 SWAP3 POP POP POP PUSH1 0xA0 DUP14 ADD PUSH1 0x80 DUP15 ADD PUSH2 0x278C JUMP JUMPDEST PUSH2 0x160 DUP14 ADD CALLDATALOAD SWAP2 SWAP1 PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x632 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3C76 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x644 PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x278C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8EF98A7E DUP13 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x669 SWAP2 SWAP1 PUSH2 0x3D5C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x69C SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x33A4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6EC SWAP2 SWAP1 PUSH2 0x295F JUMP JUMPDEST SWAP2 POP PUSH2 0x700 PUSH1 0xC0 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP14 ADD CALLDATALOAD PUSH2 0x1C17 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x712 SWAP2 PUSH2 0x1C17 JUMP JUMPDEST GT ISZERO PUSH2 0x730 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CE2 JUMP JUMPDEST POP PUSH2 0x74B JUMP JUMPDEST PUSH2 0x748 CALLDATASIZE DUP12 SWAP1 SUB DUP12 ADD PUSH1 0xC0 DUP13 ADD PUSH2 0x288D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x764 PUSH2 0x75E PUSH1 0xC0 DUP13 ADD PUSH1 0xA0 DUP14 ADD PUSH2 0x278C JUMP JUMPDEST DUP3 PUSH2 0x1C43 JUMP JUMPDEST PUSH32 0x93F6B8187E81BD7D01CE234C043CD6AE4FEDA2E2AE91DAAE0962C68A656DA8C7 CALLER DUP12 DUP5 DUP13 DUP13 DUP13 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x7A1 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x805 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x827 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x880 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x8A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x8B6 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x34BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E7 DUP8 PUSH2 0x1C99 JUMP JUMPDEST SWAP1 POP PUSH2 0x8F6 DUP2 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1CAC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x925 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x38C5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x95D SWAP2 PUSH2 0x953 SWAP2 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST DUP10 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x1DB6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 PUSH2 0x987 JUMPI POP PUSH1 0x0 PUSH2 0x97B PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x9A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x34F3 JUMP JUMPDEST PUSH2 0x9CC PUSH2 0x9B6 PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH2 0x9C6 PUSH1 0x60 DUP12 ADD PUSH1 0x40 DUP13 ADD PUSH2 0x278C JUMP JUMPDEST DUP4 PUSH2 0x1DCA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9DE PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xA5C JUMPI PUSH2 0x9FC PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF50CD32C DUP10 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA29 SWAP3 SWAP2 SWAP1 PUSH2 0x3DFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xAB4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3BC2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xAFD JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0xB19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x384D JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xB4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x35C2 JUMP JUMPDEST PUSH2 0xB53 PUSH2 0x1DFB JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xB89 PUSH2 0x2653 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xBD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xBF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xC7B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xC9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0xCB1 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xCE9 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCDE PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0xD17 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD0C PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3755 JUMP JUMPDEST DUP4 PUSH2 0xD50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x371E JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH2 0xD70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3BF2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0xD7C DUP8 PUSH2 0x1E02 JUMP JUMPDEST EQ PUSH2 0xD99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3441 JUMP JUMPDEST PUSH2 0xDA1 PUSH2 0x1E15 JUMP JUMPDEST PUSH2 0xDBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x10ED JUMPI PUSH1 0x0 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0xDD6 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xDEB SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP4 LT ISZERO PUSH2 0xE70 JUMPI DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xE03 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 POP DUP9 DUP1 PUSH1 0x60 ADD SWAP1 PUSH2 0xE1C SWAP2 SWAP1 PUSH2 0x3E27 JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xE26 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE3B SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE6B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3485 JUMP JUMPDEST PUSH2 0xEDC JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH2 0xE81 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3E27 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH2 0xE97 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3E27 JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xEA1 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xEB6 SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xED4 JUMPI PUSH2 0xEDC JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEEB PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x3E27 JUMP JUMPDEST SWAP1 POP DUP3 EQ PUSH2 0xF16 JUMPI PUSH2 0xF00 PUSH1 0xE0 DUP12 ADD DUP12 PUSH2 0x3E27 JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0xF19 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT PUSH2 0xF53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x37CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xF78 DUP4 PUSH2 0x1E32 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF85 DUP5 PUSH2 0x1E4D JUMP JUMPDEST SWAP1 POP PUSH2 0xF8F PUSH2 0x262E JUMP JUMPDEST PUSH2 0xF9C PUSH1 0x60 DUP14 ADD DUP14 PUSH2 0x3E27 JUMP JUMPDEST SWAP1 POP DUP5 EQ ISZERO PUSH2 0x1026 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP16 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xFE8 SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 PUSH1 0x40 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1012 SWAP2 SWAP1 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE SWAP1 MSTORE SWAP1 POP PUSH2 0x10D2 JUMP JUMPDEST PUSH2 0x1033 PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x3E6D JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0x103D JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x80 MUL ADD DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1053 SWAP2 SWAP1 PUSH2 0x288D JUMP JUMPDEST SWAP1 POP PUSH2 0x1094 PUSH2 0x1065 PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x3E27 JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x106F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP5 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x1089 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x1E82 JUMP JUMPDEST DUP2 MLOAD MSTORE PUSH2 0x10CB PUSH2 0x10A7 PUSH1 0xC0 DUP15 ADD DUP15 PUSH2 0x3E27 JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x10B1 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x1089 JUMPI INVALID JUMPDEST DUP2 MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST PUSH2 0x10DC DUP6 DUP3 PUSH2 0x1C43 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0xDC0 SWAP2 POP POP JUMP JUMPDEST POP PUSH32 0x49CBB28C69FFBDB6B3893F83D64557662A5DD43FFD6045B6A5180AB0A027F224 CALLER DUP8 PUSH1 0x7 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x1126 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31F4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1184 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x11A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x11D3 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x11EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3B8B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x1222 SWAP1 DUP6 SWAP1 PUSH2 0x1DB6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x1244 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3AE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1274 SWAP1 DUP3 PUSH2 0x1E9B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x12A5 DUP5 DUP4 DUP4 PUSH2 0x1DCA JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x12F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x131B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP3 ADDRESS PUSH2 0x132F PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1355 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x358D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1360 DUP6 PUSH2 0x1BBF JUMP JUMPDEST SWAP1 POP PUSH2 0x1373 DUP5 DUP5 PUSH1 0x7 PUSH1 0x2 ADD SLOAD DUP5 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x137B PUSH2 0x1E15 JUMP JUMPDEST PUSH2 0x1397 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0x13CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3B42 JUMP JUMPDEST DUP2 DUP2 SSTORE PUSH2 0x13DF TIMESTAMP PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH2 0x1C17 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0x87B348A76DD4EF431D45553A1D8C5934DB960E64201A5776AB64E3EB397F4CFA SWAP1 PUSH2 0x1126 SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP6 SWAP1 PUSH2 0x3247 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1461 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1483 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1491 DUP3 PUSH2 0x1F3F JUMP JUMPDEST ISZERO PUSH2 0x14BA JUMPI DUP1 CALLVALUE EQ PUSH2 0x14B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x38FC JUMP JUMPDEST PUSH2 0x1500 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x14D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3975 JUMP JUMPDEST PUSH2 0x14E4 DUP3 CALLER ADDRESS DUP5 PUSH2 0x1F4C JUMP JUMPDEST PUSH2 0x1500 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3884 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x1550 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x15CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH2 0x15D7 DUP3 PUSH2 0x1E32 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1628 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x164A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 PUSH2 0x1657 DUP5 PUSH2 0x1C99 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x16BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x16DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH2 0x15D7 DUP3 PUSH2 0x1E4D JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1730 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1752 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x1766 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x179E JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1793 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x17CC JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x17C1 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x278C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3755 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17F3 DUP8 PUSH2 0x1E02 JUMP JUMPDEST SWAP1 POP PUSH2 0x1803 DUP8 DUP3 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1F9F JUMP JUMPDEST PUSH2 0x180B PUSH2 0x1E15 JUMP JUMPDEST ISZERO PUSH2 0x1828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x120 DUP9 ADD CALLDATALOAD GT PUSH2 0x184E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x35F9 JUMP JUMPDEST PUSH2 0x1856 PUSH2 0x20A9 JUMP JUMPDEST PUSH2 0x188A JUMPI PUSH2 0x1869 TIMESTAMP PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH2 0x1C17 JUMP JUMPDEST PUSH1 0xA SSTORE PUSH2 0x1886 PUSH2 0x187F PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH1 0x2 PUSH2 0x20B1 JUMP JUMPDEST TIMESTAMP SWAP1 PUSH2 0x1C17 JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x7 DUP2 DUP2 SSTORE PUSH2 0x120 DUP9 ADD CALLDATALOAD PUSH1 0x8 SSTORE PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH1 0x9 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEF03CF86F2E77E1A0AE5CB25B50519E55B94788B920ACE71F92341DF2DAB97ED SWAP2 PUSH2 0x18D3 SWAP2 CALLER SWAP2 DUP12 SWAP2 PUSH2 0x31C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1934 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1956 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x19BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x19DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1A68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1ADF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1B01 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1B19 PUSH2 0x2673 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1B62 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3CAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1B84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A67 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x7 SLOAD DUP2 MSTORE PUSH1 0x8 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x9 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xB SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C05 DUP6 DUP6 PUSH2 0x20EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x369E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1C94 JUMPI DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 PUSH1 0x2 DUP2 LT PUSH2 0x1C5F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 POP DUP1 ISZERO PUSH2 0x1C8B JUMPI PUSH2 0x1C8B DUP5 DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x2 DUP2 LT PUSH2 0x1C80 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x2103 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1C46 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3DE9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1CC2 SWAP3 SWAP2 SWAP1 PUSH2 0x33DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1D28 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x1 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x1D44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3B0B JUMP JUMPDEST PUSH2 0x1D92 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x2 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x1DAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3816 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C3C DUP3 PUSH2 0x1DC5 DUP6 PUSH2 0x2164 JUMP JUMPDEST PUSH2 0x21FB JUMP JUMPDEST PUSH2 0x1DD4 DUP4 DUP3 PUSH2 0x2211 JUMP JUMPDEST PUSH2 0x1DDF DUP4 DUP4 DUP4 PUSH2 0x2233 JUMP JUMPDEST PUSH2 0x1C94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3DA4 JUMP JUMPDEST PUSH1 0x0 TIMESTAMP PUSH1 0x7 PUSH1 0x3 ADD SLOAD GT ISZERO DUP1 ISZERO PUSH2 0x1E2D JUMPI POP PUSH1 0xB SLOAD TIMESTAMP LT JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0x1E7A DUP5 PUSH2 0x2164 JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x0 NOT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C3C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x225C JUMP JUMPDEST PUSH2 0x1F1D DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x2288 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F39 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A9E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F96 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1F67 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x333E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2325 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1FB4 SWAP3 SWAP2 SWAP1 PUSH2 0x33DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x201E DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2016 SWAP3 POP POP POP PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST DUP4 SWAP2 SWAP1 PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x203A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3C35 JUMP JUMPDEST PUSH2 0x2084 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2016 SWAP3 POP POP POP PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x278C JUMP JUMPDEST PUSH2 0x20A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3667 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD TIMESTAMP LT SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x20C0 JUMPI POP PUSH1 0x0 PUSH2 0x15D7 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x20CD JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1C3C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x39FB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x20F7 DUP5 PUSH2 0x23D6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E93 DUP2 DUP5 PUSH2 0x23E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2133 SWAP1 DUP3 PUSH2 0x1E82 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP7 AND DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x216F DUP3 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0x21F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x219F SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x31AD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21EF SWAP2 SWAP1 PUSH2 0x2C9A JUMP JUMPDEST PUSH2 0x15D7 JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x220A JUMPI DUP2 PUSH2 0x1C3C JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x223E DUP5 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0x2252 JUMPI PUSH2 0x224D DUP5 DUP5 DUP5 PUSH2 0x2517 JUMP JUMPDEST PUSH2 0x1E93 JUMP JUMPDEST PUSH2 0x1E93 DUP4 DUP4 PUSH2 0x2524 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x2280 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP2 SWAP1 PUSH2 0x33F7 JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x231A JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x22A4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x22E5 JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22C8 SWAP3 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x2311 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22F8 SWAP3 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x228D JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2330 DUP4 PUSH2 0x259C JUMP JUMPDEST PUSH2 0x234C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3A3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2368 SWAP2 SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23A5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x23AA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x23B9 DUP3 DUP3 PUSH2 0x25D5 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x1F96 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1F96 SWAP2 SWAP1 PUSH2 0x2855 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1BD2 SWAP2 SWAP1 PUSH2 0x3179 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x240C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x351F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x245E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x378C JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x2476 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x2493 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x3933 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x24B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3386 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x250D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x166 SWAP1 PUSH2 0x340A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E93 DUP5 DUP5 DUP5 PUSH2 0x25E6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2540 SWAP1 PUSH2 0x31AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x257D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2582 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2591 DUP3 DUP3 PUSH2 0x25D5 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x1E93 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x25E2 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E93 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x25FF SWAP3 SWAP2 SWAP1 PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2325 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x2641 PUSH2 0x26A1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x264E PUSH2 0x26A1 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x15D7 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x26DB JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x26F1 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2723 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2739 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2763 JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2763 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2763 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x279D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C3C DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x27BA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x27C5 DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x27D5 DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x27F4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x27FF DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x280F DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x281F DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x283C JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2847 DUP2 PUSH2 0x3FAC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2866 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2886 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x289E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x28A8 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x28B6 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x28C0 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x28D2 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x28F3 JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x28D4 JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x2905 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x290F PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x2925 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2950 JUMPI DUP2 CALLDATALOAD PUSH2 0x293B DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2927 JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2970 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x297A PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2988 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2992 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x29A4 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x29C5 JUMPI DUP3 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x29A6 JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x29D7 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x29E1 PUSH1 0x40 PUSH2 0x3EB3 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x29F7 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2950 JUMPI DUP2 MLOAD PUSH2 0x2A0D DUP2 PUSH2 0x3FAC JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x29F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2A39 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2A4F JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2A5B DUP10 DUP4 DUP11 ADD PUSH2 0x2751 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2A70 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2A7C DUP10 DUP4 DUP11 ADD PUSH2 0x26CA JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2A94 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2AA1 DUP9 DUP3 DUP10 ADD PUSH2 0x26CA JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2AC9 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2ADF JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2AEB DUP10 DUP4 DUP11 ADD PUSH2 0x2751 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B00 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B0C DUP10 DUP4 DUP11 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B24 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2AA1 DUP9 DUP3 DUP10 ADD PUSH2 0x2712 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A0 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2B46 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2B50 DUP6 DUP6 PUSH2 0x2769 JUMP JUMPDEST SWAP3 POP PUSH2 0x180 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2B6B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2B77 DUP7 DUP3 DUP8 ADD PUSH2 0x26CA JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1E0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2B9F JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2BA9 DUP10 DUP10 PUSH2 0x2769 JUMP JUMPDEST SWAP7 POP PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2BC5 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x2BD1 DUP12 DUP4 DUP13 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x1A0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2BEA JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2BF6 DUP12 DUP4 DUP13 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1C0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C0F JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x2C1C DUP11 DUP3 DUP12 ADD PUSH2 0x2712 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C40 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C55 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1E93 DUP5 DUP3 DUP6 ADD PUSH2 0x277B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2C78 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2C8E JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2AEB DUP10 DUP4 DUP11 ADD PUSH2 0x277B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CAB JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2CFC JUMPI DUP2 CALLDATALOAD PUSH2 0x2CE1 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2CCE JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2CFC JUMPI PUSH1 0x40 DUP1 DUP4 DUP10 CALLDATACOPY DUP8 DUP2 ADD DUP6 DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP6 SWAP1 JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x2D62 JUMPI DUP3 CALLDATALOAD PUSH2 0x2D45 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP6 ADD PUSH2 0x2D31 JUMP JUMPDEST POP POP POP PUSH1 0x80 SWAP7 DUP8 ADD SWAP7 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D16 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x2D90 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x20 DUP4 MUL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2DEE DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3F80 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 PUSH1 0x40 DUP4 DUP2 ADD DUP3 DUP2 MSTORE SWAP1 DUP4 ADD SWAP2 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E47 JUMPI PUSH1 0x20 DUP4 CALLDATALOAD PUSH2 0x2E2C DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2E16 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 PUSH1 0x20 DUP4 ADD PUSH2 0x2E98 DUP6 PUSH2 0x2E93 DUP4 DUP8 PUSH2 0x26BF JUMP JUMPDEST PUSH2 0x2CB2 JUMP JUMPDEST PUSH2 0x2EA2 DUP2 DUP6 PUSH2 0x3ED9 JUMP JUMPDEST SWAP1 POP PUSH2 0x2EB1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x2EBF PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x2ECC PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x2EDA PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x2EED DUP4 DUP8 ADD DUP3 DUP5 PUSH2 0x2CBF JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2EFE PUSH1 0x80 DUP5 ADD DUP5 PUSH2 0x3F2D JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x2F11 DUP4 DUP3 DUP5 PUSH2 0x2D07 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2F22 PUSH1 0xA0 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x2F35 DUP4 DUP3 DUP5 PUSH2 0x2D78 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2F46 PUSH1 0xC0 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x2F59 DUP4 DUP3 DUP5 PUSH2 0x2D78 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x2F6A PUSH1 0xE0 DUP5 ADD DUP5 PUSH2 0x3EE6 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x2F7D DUP4 DUP3 DUP5 PUSH2 0x2D78 JUMP JUMPDEST PUSH2 0x100 DUP7 DUP2 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x120 DUP1 DUP8 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP6 DUP7 ADD CALLDATALOAD SWAP6 SWAP1 SWAP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2FB6 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 PUSH2 0x2FDC DUP3 PUSH2 0x3FAC JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2FEF PUSH1 0x60 DUP3 ADD DUP3 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x2FFC PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x300A PUSH1 0x80 DUP3 ADD DUP3 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x3017 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x3025 PUSH1 0xA0 DUP3 ADD DUP3 PUSH2 0x3ED9 JUMP JUMPDEST PUSH2 0x3032 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x2CB2 JUMP JUMPDEST POP PUSH2 0x3043 PUSH1 0xC0 DUP4 ADD PUSH1 0xC0 DUP4 ADD PUSH2 0x2E02 JUMP JUMPDEST PUSH2 0x140 DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH2 0x3086 DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP5 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x30A2 DUP3 PUSH2 0x3FAC JUMP JUMPDEST SWAP1 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x30B9 DUP3 PUSH2 0x3FAC JUMP JUMPDEST DUP1 DUP3 AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x30E5 DUP3 PUSH2 0x3FAC JUMP JUMPDEST AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD CALLDATASIZE DUP4 SWAP1 SUB PUSH1 0x1E NOT ADD DUP2 SLT PUSH2 0x3102 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3119 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x3127 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xE0 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x1F96 PUSH1 0xE0 DUP7 ADD DUP3 PUSH1 0x20 DUP6 ADD PUSH2 0x2DAC JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x316F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3F80 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x31E5 SWAP1 DUP4 ADD DUP6 PUSH2 0x2E7C JUMP JUMPDEST SWAP1 POP PUSH2 0x1E93 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2E4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3219 DUP4 DUP3 ADD DUP9 PUSH2 0x2E7C JUMP JUMPDEST SWAP1 POP PUSH2 0x3228 PUSH1 0x40 DUP5 ADD DUP8 PUSH2 0x2E4E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x323B DUP2 DUP6 DUP8 PUSH2 0x2CBF JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH2 0x200 DUP2 ADD PUSH2 0x3265 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0x1E93 PUSH2 0x1A0 DUP4 ADD DUP5 PUSH2 0x305A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x0 PUSH2 0x2C0 PUSH1 0x20 PUSH2 0x3292 DUP2 DUP6 ADD DUP13 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0x32A0 PUSH2 0x1A0 DUP6 ADD DUP12 PUSH2 0x305A JUMP JUMPDEST DUP2 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x32B4 DUP3 DUP6 ADD DUP10 DUP12 PUSH2 0x2DAC JUMP JUMPDEST SWAP2 POP DUP4 DUP3 SUB PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x32CA DUP3 DUP8 DUP10 PUSH2 0x2DAC JUMP JUMPDEST DUP6 MLOAD SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x0 PUSH2 0x240 DUP6 ADD JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x32F8 JUMPI DUP4 MLOAD DUP2 MSTORE SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP3 ADD PUSH2 0x32D9 JUMP JUMPDEST POP POP DUP1 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x280 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x332D JUMPI PUSH2 0x331B DUP5 MLOAD PUSH2 0x3F74 JUMP JUMPDEST DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3308 JUMP JUMPDEST POP POP POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x33B7 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x2DD6 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x33CA DUP2 DUP8 DUP10 PUSH2 0x2DAC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x323B DUP2 DUP6 DUP8 PUSH2 0x2DAC JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x33ED JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C3C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2DD6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C5F PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x9082A69 PUSH1 0xE3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E4445585F4D49534D415443480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A204348414E4E454C5F4D49534D41544348000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x434D4357697468647261773A204E4F5F4F5 PUSH1 0x74 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5048415345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4E4F4E4345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F424F425F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D111519553911151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204E4F5F4153534554535F474956454E00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204348414E4E454C5F414C52454144595F PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1111519553911151 PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F424F425F53494700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20414C52454144595F4558454355544544000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F4E4F545F444953 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1415551151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4D45524B4C455F50 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x2927A7A3 PUSH1 0xE1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F414C4943455F5349470000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D11254D415551151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A2057524F4E475F41525241595F4C454E47 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x544853 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F414C4943455F5349 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x47 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5245534F4C564552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F42414C414E434553 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0xBE9082A69 PUSH1 0xDB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x15D7 DUP3 DUP5 PUSH2 0x2E02 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C3C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2E7C JUMP JUMPDEST PUSH2 0x180 DUP2 ADD PUSH2 0x15D7 DUP3 DUP5 PUSH2 0x2FAB JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C3C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3079 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x3E0F PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3079 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3E3D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3E56 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP2 ADD SWAP3 POP DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3E83 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3E9C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3ED1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x1C3C DUP2 PUSH2 0x3FAC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3EFC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3F1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3F43 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3F62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x270B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F9B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F83 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1F39 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3FC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC JUMPI PUSH2 0xA7A2 DIFFICULTY 0xEA ADD ORIGIN STATICCALL DIFFICULTY 0xDD 0xDC CREATE 0xE7 0xDB DUP11 SMOD 0xD9 0x5D 0xB5 0xEA 0xE2 PUSH31 0x73FFF5D050F1145C64736F6C63430007010033000000000000000000000000 ",
              "sourceMap": "635:133:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;307:1;542:4;576:11:::0;635:133:16;;;;;9214:2884:10;;;;;;;;;;-1:-1:-1;9214:2884:10;;;;;:::i;:::-;;:::i;:::-;;2153:168:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1767:1166:14;;;;;;;;;;-1:-1:-1;1767:1166:14;;;;;:::i;:::-;;:::i;1322:447:12:-;;;;;;;;;;-1:-1:-1;1322:447:12;;;;;:::i;:::-;;:::i;2174:238:10:-;;;;;;;;;;-1:-1:-1;2174:238:10;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3827:3983::-;;;;;;;;;;-1:-1:-1;3827:3983:10;;;;;:::i;:::-;;:::i;3046:910:11:-;;;;;;;;;;-1:-1:-1;3046:910:11;;;;;:::i;:::-;;:::i;7816:1392:10:-;;;;;;;;;;-1:-1:-1;7816:1392:10;;;;;:::i;:::-;;:::i;1752:848:13:-;;;;;;:::i;:::-;;:::i;789:226::-;;;;;;;;;;-1:-1:-1;789:226:13;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1089:242:14:-;;;;;;;;;;-1:-1:-1;1089:242:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1182:222:13:-;;;;;;;;;;-1:-1:-1;1182:222:13;;;;;:::i;:::-;;:::i;2418:1403:10:-;;;;;;;;;;-1:-1:-1;2418:1403:10;;;;;:::i;:::-;;:::i;1238:218:11:-;;;;;;;;;;-1:-1:-1;1238:218:11;;;;;:::i;:::-;;:::i;1959:209:10:-;;;;;;;;;;-1:-1:-1;1959:209:10;;;;;:::i;:::-;;:::i;2026:236:11:-;;;;;;;;;;-1:-1:-1;2026:236:11;;;;;:::i;:::-;;:::i;1874:172:12:-;;;;;;;;;;;;;:::i;1749:204:10:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;356:19:17:-;;;;;;;;;;;;;:::i;9214:2884:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;9488:3:10;1662:4:::2;1632:18;;::::0;::::2;9488:3:::0;1632:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1632:35:10::2;;1611:114;;;;-1:-1:-1::0;;;1611:114:10::2;;;;;;;:::i;:::-;9622:14:::3;::::0;;::::3;;9551:39;9605:32:::0;;;:16:::3;:32:::0;;;;;;9745:37:::3;::::0;::::3;::::0;9724:126:::3;;;;-1:-1:-1::0;;;9724:126:10::3;;;;;;;:::i;:::-;9979:33:::0;;9953:22:::3;9971:3:::0;9953:17:::3;:22::i;:::-;:59;9932:143;;;;-1:-1:-1::0;;;9932:143:10::3;;;;;;;:::i;:::-;10141:26;::::0;::::3;::::0;::::3;;10140:27;10119:115;;;;-1:-1:-1::0;;;10119:115:10::3;;;;;;;:::i;:::-;10244:26;::::0;::::3;:33:::0;;-1:-1:-1;;10244:33:10::3;10273:4;10244:33;::::0;;10288:22:::3;;:::i;:::-;10343:15;:37;;;10325:15;:55;10321:1400;;;10514:3;:20;;;10482:27;;10472:38;;;;;;;:::i;:::-;;;;;;;;:62;10447:158;;;;-1:-1:-1::0;;;10447:158:10::3;;;;;;;:::i;:::-;10794:13;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;10780:27:10::3;:10;-1:-1:-1::0;;;;;10780:27:10::3;;:101;;;;10811:70;10847:18;;10811:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;10867:13:10::3;::::0;-1:-1:-1;;;10867:13:10;;;::::3;::::0;::::3;;:::i;:::-;10811:20;::::0;::::3;;::::0;:70;:35:::3;:70::i;:::-;10755:192;;;;-1:-1:-1::0;;;10755:192:10::3;;;;;;;:::i;:::-;10974:38;11051:22;::::0;;;::::3;::::0;::::3;;:::i;:::-;10974:100;;11098:18;-1:-1:-1::0;;;;;11098:26:10::3;;11153:3;:11;;11142:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;11183:27;;11228:23;;11098:167;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11088:177:::0;-1:-1:-1;11443:48:10::3;11469:11;::::0;::::3;11443:21;11469::::0;;;::::3;11443:25;:48::i;:::-;11401:14:::0;;:17:::3;::::0;::::3;::::0;11379;;:40:::3;::::0;:21:::3;:40::i;:::-;:112;;11354:203;;;;-1:-1:-1::0;;;11354:203:10::3;;;;;;;:::i;:::-;10321:1400;;;;11689:21;;::::0;;;;;11699:11:::3;::::0;::::3;11689:21;:::i;:::-;;;10321:1400;11817:41;11837:11;::::0;;;::::3;::::0;::::3;;:::i;:::-;11850:7;11817:19;:41::i;:::-;11896:195;11926:10;11950:3;11967:15;11996:27;;12037:23;;12074:7;11896:195;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;;;;9214:2884:10:o;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1767:1166:14:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1966:2:14;1005:4:::2;976:17;;::::0;::::2;1966:2:::0;976:17:::2;:::i;:::-;-1:-1:-1::0;;;;;976:34:14::2;;955:110;;;;-1:-1:-1::0;;;955:110:14::2;;;;;;;:::i;:::-;2005:14:::3;2022:20;2039:2;2022:16;:20::i;:::-;2005:37;;2120:72;2155:6;2163:14;;2179:12;;2120:34;:72::i;:::-;2241:18;::::0;;;:10:::3;:18;::::0;;;;;::::3;;2240:19;2232:61;;;;-1:-1:-1::0;;;2232:61:14::3;;;;;;;:::i;:::-;2303:18;::::0;;;:10:::3;:18;::::0;;;;;;;:25;;-1:-1:-1;;2303:25:14::3;2324:4;2303:25;::::0;;2412:41:::3;::::0;2431:10:::3;::::0;;;;;::::3;;:::i;:::-;2443:2;:9;;;2412:18;:41::i;:::-;2389:64;;2557:1;2542:12;:16;:43;;;-1:-1:-1::0;2583:1:14::3;2562:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2562:23:14::3;;;2542:43;2521:108;;;;-1:-1:-1::0;;;2521:108:14::3;;;;;;;:::i;:::-;2685:53;2699:10;::::0;;;::::3;::::0;::::3;;:::i;:::-;2711:12;::::0;;;::::3;::::0;::::3;;:::i;:::-;2725;2685:13;:53::i;:::-;2847:1;2826:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2826:23:14::3;;2822:105;;2880:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2865:33:14::3;;2899:2;2903:12;2865:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;2822:105;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;;1767:1166:14:o;1322:447:12:-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;2174:238:10:-;2332:22;;:::i;:::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2377:28:10::2;::::0;;;:16:::2;:28;::::0;;;;;;;;2370:35;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;;::::0;::::2;;;;::::0;;;;;;;;2174:238::o;3827:3983::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;4028:3:10;1385:4:::2;1355:18;;::::0;::::2;4028:3:::0;1355:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1355:35:10::2;;:73;;;;-1:-1:-1::0;1423:5:10::2;::::0;-1:-1:-1;;;;;1423:5:10::2;1410:9;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1410:18:10::2;;1355:73;:107;;;;-1:-1:-1::0;1459:3:10::2;::::0;-1:-1:-1;;;;;1459:3:10::2;1448:7;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1448:14:10::2;;1355:107;1334:185;;;;-1:-1:-1::0;;;1334:185:10::2;;;;;;;:::i;:::-;4135:19:::0;4127:63:::3;;;;-1:-1:-1::0;;;4127:63:10::3;;;;;;;:::i;:::-;4221:33:::0;;::::3;;4200:115;;;;-1:-1:-1::0;;;4200:115:10::3;;;;;;;:::i;:::-;4442:14;:31:::0;4417:21:::3;4434:3:::0;4417:16:::3;:21::i;:::-;:56;4396:139;;;;-1:-1:-1::0;;;4396:139:10::3;;;;;;;:::i;:::-;4604:15;:13;:15::i;:::-;4596:57;;;;-1:-1:-1::0;;;4596:57:10::3;;;;;;;:::i;:::-;5018:9;5013:2659;5033:19:::0;;::::3;5013:2659;;;5073:15;5091:8;;5100:1;5091:11;;;;;;;;;;;;;;;;;;;;:::i;:::-;5073:29:::0;-1:-1:-1;5192:13:10::3;5223:18:::0;;::::3;5219:564;;;5332:7;;5340:1;5332:10;;;;;;;;;;;;;5324:18;;5400:3;:12;;;;;;;;:::i;:::-;5413:5;5400:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5389:30:10::3;:7;-1:-1:-1::0;;;;;5389:30:10::3;;5360:131;;;;-1:-1:-1::0;;;5360:131:10::3;;;;;;;:::i;:::-;5219:564;;;-1:-1:-1::0;5598:1:10::3;5585:184;5609:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;5601:5;:27;5585:184;;;5676:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;5689:5;5676:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5665:30:10::3;:7;-1:-1:-1::0;;;;;5665:30:10::3;;5661:90;;;5723:5;;5661:90;5630:7;;5585:184;;;6203:19;6255:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;6246:5;:28;6245:127;;6349:16;;::::0;::::3;:3:::0;:16:::3;:::i;:::-;6366:5;6349:23;;;;;;;;;;;;;6245:127;;;1096:1;6245:127;-1:-1:-1::0;;;;;6419:21:10;::::3;;::::0;;;:12:::3;:21;::::0;;;;;6203:169;;-1:-1:-1;6419:35:10;-1:-1:-1;6390:146:10::3;;;;-1:-1:-1::0;;;6390:146:10::3;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6554:21:10;::::3;;::::0;;;:12:::3;:21;::::0;;;;:35;;;;6670:31:::3;6567:7:::0;6670:22:::3;:31::i;:::-;6652:49;;6715:13;6731:29;6752:7;6731:20;:29::i;:::-;6715:45;;6775:22;;:::i;:::-;6825:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;6816:5;:28;6812:752;;;6964:137;;;;;;;;;;;;;;;;7003:7;6964:137;;;;7012:5;6964:137;;::::0;::::3;;;;;;;;;;;;7053:3;:9;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6964:137:10::3;-1:-1:-1::0;;;;;6964:137:10::3;;;;;7073:3;:7;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6964:137:10::3;::::0;;;;6954:147;-1:-1:-1;6812:752:10::3;;;7206:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;7219:5;7206:19;;;;;;;;;;;;7196:29;;;;;;;;;;:::i;:::-;::::0;-1:-1:-1;7307:103:10::3;7363:22;;::::0;::::3;:3:::0;:22:::3;:::i;:::-;7386:5;7363:29;;;;;;;;;;;;;7353:7;:39;7307:7;:14;;;7322:1;7307:17;;;;;;;;;;::::0;;:24:::3;:103::i;:::-;7287:14:::0;;:123;7448:101:::3;7502:22;;::::0;::::3;::::0;::::3;:::i;:::-;7525:5;7502:29;;;;;;;;;;;;;7494:5;:37;7448:7;:14;;;7463:1;7448:17;;;;;;:101;7428:14:::0;;:17:::3;;:121:::0;6812:752:::3;7624:37;7644:7;7653;7624:19;:37::i;:::-;-1:-1:-1::0;;5054:3:10::3;::::0;;::::3;::::0;-1:-1:-1;5013:2659:10::3;::::0;-1:-1:-1;;5013:2659:10::3;;;7687:116;7716:10;7740:3;7757:14;7785:8;;7687:116;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;3827:3983:10:o;3046:910:11:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;3373:10:11::2;-1:-1:-1::0;;;;;3373:19:11;::::2;;::::0;:41:::2;;;3405:9;-1:-1:-1::0;;;;;3396:18:11::2;:5;-1:-1:-1::0;;;;;3396:18:11::2;;3373:41;3352:112;;;;-1:-1:-1::0;;;3352:112:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3565:23:11;;::::2;3475:14;3565:23:::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;;;3504:105:::2;::::0;3540:7;;3504:18:::2;:105::i;:::-;3475:134;;3670:1;3661:6;:10;3653:38;;;;-1:-1:-1::0;;;3653:38:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3827:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;:42:::2;::::0;3862:6;3827:34:::2;:42::i;:::-;-1:-1:-1::0;;;;;3772:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:52;;::::2;::::0;;;;;;:97;3908:41:::2;3787:7:::0;3931:9;3942:6;3908:13:::2;:41::i;:::-;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;3046:910:11:o;7816:1392:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;7992:3:10;1662:4:::2;1632:18;;::::0;::::2;7992:3:::0;1632:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1632:35:10::2;;1611:114;;;;-1:-1:-1::0;;;1611:114:10::2;;;;;;;:::i;:::-;8100:25:::3;8128:22;8146:3;8128:17;:22::i;:::-;8100:50;;8160:126;8191:15;;8220:14;:25;;;8259:17;8160;:126::i;:::-;8400:15;:13;:15::i;:::-;8392:57;;;;-1:-1:-1::0;;;8392:57:10::3;;;;;;;:::i;:::-;8579:14;::::0;;::::3;;8508:39;8562:32:::0;;;:16:::3;:32:::0;;;;;;8692:37:::3;::::0;::::3;::::0;:42;8671:130:::3;;;;-1:-1:-1::0;;;8671:130:10::3;;;;;;;:::i;:::-;8859:53:::0;;;9027:62:::3;:15;9060:19;::::0;::::3;;9027;:62::i;:::-;8987:37;::::0;::::3;:102:::0;9105:96:::3;::::0;::::3;::::0;::::3;::::0;9135:10:::3;::::0;9159:3;;8987:15;;9105:96:::3;:::i;1752:848:13:-:0;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1917:25:13::2;1934:7:::0;1917:16:::2;:25::i;:::-;1913:540;;;1979:6;1966:9;:19;1958:58;;;;-1:-1:-1::0;;;1958:58:13::2;;;;;;;:::i;:::-;1913:540;;;2121:9;:14:::0;2113:60:::2;;;;-1:-1:-1::0;;;2113:60:13::2;;;;;;;:::i;:::-;2212:163;2255:7;2284:10;2324:4;2351:6;2212:21;:163::i;:::-;2187:255;;;;-1:-1:-1::0;;;2187:255:13::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2515:22:13;::::2;;::::0;;;:13:::2;:22;::::0;;;;;;:32;;;::::2;::::0;;2562:31;::::2;::::0;::::2;::::0;2529:7;;2541:6;;2562:31:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;1752:848:13:o;789:226::-;947:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;977:31:13::2;1000:7;977:22;:31::i;:::-;970:38:::0;789:226;-1:-1:-1;;789:226:13:o;1089:242:14:-;1265:4;1024::12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1292:10:14::2;:32;1303:20;1320:2;1303:16;:20::i;:::-;1292:32:::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;1292:32:14;;::::2;;::::0;1089:242;-1:-1:-1;;1089:242:14:o;1182:222:13:-;1338:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1368:29:13::2;1389:7;1368:20;:29::i;2418:1403:10:-:0;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;2623:3:10;1385:4:::2;1355:18;;::::0;::::2;2623:3:::0;1355:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1355:35:10::2;;:73;;;;-1:-1:-1::0;1423:5:10::2;::::0;-1:-1:-1;;;;;1423:5:10::2;1410:9;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1410:18:10::2;;1355:73;:107;;;;-1:-1:-1::0;1459:3:10::2;::::0;-1:-1:-1;;;;;1459:3:10::2;1448:7;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1448:14:10::2;;1355:107;1334:185;;;;-1:-1:-1::0;;;1334:185:10::2;;;;;;;:::i;:::-;2663:15:::3;2681:21;2698:3;2681:16;:21::i;:::-;2663:39;;2780:78;2815:3;2820:7;2829:14;;2845:12;;2780:34;:78::i;:::-;2937:15;:13;:15::i;:::-;2936:16;2928:58;;;;-1:-1:-1::0;;;2928:58:10::3;;;;;;;:::i;:::-;3084:20:::0;;3107:9:::3;::::0;::::3;;-1:-1:-1::0;3063:108:10::3;;;;-1:-1:-1::0;;;3063:108:10::3;;;;;;;:::i;:::-;3187:18;:16;:18::i;:::-;3182:372;;3398:32;:15;3418:11;::::0;::::3;;3398:19;:32::i;:::-;3365:30:::0;:65;3474:69:::3;3511:18;:11;::::0;::::3;;3527:1;3511:15;:18::i;:::-;3474:15;::::0;:19:::3;:69::i;:::-;3444:27:::0;:99;3182:372:::3;3593:14;:41:::0;;;3667:9:::3;::::0;::::3;;3644:20:::0;:32;3714:14:::3;::::0;::::3;;3686:25:::0;:42;3766:48:::3;::::0;::::3;::::0;::::3;::::0;3782:10:::3;::::0;3667:3;;3766:48:::3;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;2418:1403:10:o;1238:218:11:-;1394:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1424:25:11::2;;::::0;;;:16:::2;:25;::::0;;;;;;1238:218::o;1959:209:10:-;2110:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2140:21:10::2;;::::0;;;:12:::2;:21;::::0;;;;;;1959:209::o;2026:236:11:-;2195:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2225:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;;::::2;::::0;;;;;;;;;2026:236::o;1874:172:12:-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;1749:204:10:-;1888:21;;:::i;:::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;1925:21:10::2;::::0;;::::2;::::0;::::2;::::0;;1932:14:::2;1925:21:::0;;;;;::::2;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;1749:204;:::o;356:19:17:-;;;;:::o;13483:169:10:-;13589:7;13640:3;13629:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;13619:26;;;;;;13612:33;;13483:169;;;:::o;548:229:33:-;686:4;757:13;-1:-1:-1;;;;;709:61:33;:44;737:4;743:9;709:27;:44::i;:::-;-1:-1:-1;;;;;709:61:33;;;548:229;-1:-1:-1;;;;548:229:33:o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:5;;;;;;;:::i;:::-;1042:1;874:176;-1:-1:-1;;;874:176:5:o;1706:314:11:-;1822:9;1817:197;1841:1;1837;:5;1817:197;;;1880:14;;1863;;1895:1;1880:17;;;;;;;;;;;;-1:-1:-1;1915:10:11;;1911:93;;1945:44;1958:7;1967;:10;;;1978:1;1967:13;;;;;;;;;;;1982:6;1945:12;:44::i;:::-;-1:-1:-1;1844:3:11;;1817:197;;;;1706:314;;:::o;3481:161:14:-;3580:7;3631:2;3620:14;;;;;;;;:::i;2939:536::-;3113:18;3167:27;3196:6;3156:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3146:58;;;;;;3113:91;;3235:48;3261:14;;3235:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3277:5:14;;3235:10;;:48;-1:-1:-1;;;;;;3277:5:14;;-1:-1:-1;3235:25:14;:48::i;:::-;3214:125;;;;-1:-1:-1;;;3214:125:14;;;;;;;:::i;:::-;3370:44;3396:12;;3370:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3410:3:14;;3370:10;;:44;-1:-1:-1;;;;;;3410:3:14;;-1:-1:-1;3370:25:14;:44::i;:::-;3349:119;;;;-1:-1:-1;;;3349:119:14;;;;;;;:::i;:::-;2939:536;;;;;;:::o;2268:455:11:-;2379:7;2664:52;2673:9;2684:31;2707:7;2684:22;:31::i;:::-;2664:8;:52::i;2729:311::-;2861:33;2878:7;2887:6;2861:16;:33::i;:::-;2925:57;2955:7;2964:9;2975:6;2925:29;:57::i;:::-;2904:129;;;;-1:-1:-1;;;2904:129:11;;;;;;;:::i;382:54:17:-;307:1;418:4;:11;382:54::o;13310:167:10:-;13414:7;13465:3;13454:15;;;;;;;;:::i;13104:200::-;13152:4;13221:15;13187:14;:30;;;:49;;:110;;;;-1:-1:-1;13270:27:10;;13252:15;:45;13187:110;13168:129;;13104:200;:::o;1021:155:13:-;-1:-1:-1;;;;;1147:22:13;1117:7;1147:22;;;:13;:22;;;;;;;1021:155::o;1495:251::-;-1:-1:-1;;;;;1717:22:13;;1589:7;1717:22;;;:13;:22;;;;;;;;;1677:16;:25;;;;;;1631:31;1731:7;1631:22;:31::i;:::-;:71;:108;;1495:251;-1:-1:-1;;1495:251:13:o;634:157:36:-;695:7;728:5;;;750:8;;;;:34;;-1:-1:-1;;750:34:36;743:41;634:157;-1:-1:-1;;;;634:157:36:o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;12701:262:10:-;12857:37;12876:5;;12857:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12883:4:10;;-1:-1:-1;12889:4:10;;-1:-1:-1;12857:18:10;;-1:-1:-1;12857:37:10:i;:::-;12836:120;;;;-1:-1:-1;;;12836:120:10;;;;;;;:::i;:::-;12701:262;;;;:::o;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1200:442:34:-;1346:4;1381:254;1407:7;1538:6;1566:9;1597:6;1432:189;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1432:189:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:189:34;-1:-1:-1;;;1432:189:34;;;1381:8;:254::i;:::-;1362:273;1200:442;-1:-1:-1;;;;;1200:442:34:o;12104:591:10:-;12318:18;12372:27;12401:7;12361:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12351:59;;;;;;12318:92;;12441:52;12467:14;;12441:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12483:9:10;;-1:-1:-1;;;12483:9:10;;;;;;;:::i;:::-;12441:10;;:52;:25;:52::i;:::-;12420:132;;;;-1:-1:-1;;;12420:132:10;;;;;;;:::i;:::-;12583:48;12609:12;;12583:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12623:7:10;;-1:-1:-1;;;12623:7:10;;;;;;;:::i;12583:48::-;12562:126;;;;-1:-1:-1;;;12562:126:10;;;;;;;:::i;:::-;12104:591;;;;;;;:::o;12969:129::-;13061:30;;13043:15;:48;12969:129;:::o;2180:459:5:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:5;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:5;;;;;;;:::i;783:246:33:-;905:7;928:14;945:28;968:4;945:22;:28::i;:::-;928:45;;990:32;1004:6;1012:9;990:13;:32::i;1462:238:11:-;-1:-1:-1;;;;;1644:23:11;;;;;;;:14;:23;;;;;;;;:34;;;;;;;;;;:49;;1686:6;1644:41;:49::i;:::-;-1:-1:-1;;;;;1585:23:11;;;;;;;:14;:23;;;;;;;;:56;;;;;;;;;;;;;;:108;;;;-1:-1:-1;1462:238:11:o;763:223:32:-;826:7;864:16;872:7;864;:16::i;:::-;:115;;939:40;;-1:-1:-1;;;939:40:32;;-1:-1:-1;;;;;939:25:32;;;;;:40;;973:4;;939:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;864:115;;;-1:-1:-1;899:21:32;;763:223;-1:-1:-1;763:223:32:o;391:104:4:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:4;;391:104;-1:-1:-1;391:104:4:o;1112:120:11:-;-1:-1:-1;;;;;1190:25:11;;;;;;;:16;:25;;;;;:35;;;;;;;1112:120::o;2263:307:32:-;2401:4;2436:16;2444:7;2436;:16::i;:::-;:127;;2522:41;2536:7;2545:9;2556:6;2522:13;:41::i;:::-;2436:127;;;2471:32;2485:9;2496:6;2471:13;:32::i;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:5;;;1746:187::o;497:779:3:-;588:4;627;588;642:515;666:5;:12;662:1;:16;642:515;;;699:20;722:5;728:1;722:8;;;;;;;;;;;;;;699:31;;765:12;749;:28;745:402;;917:12;931;900:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;890:55;;;;;;875:70;;745:402;;;1104:12;1118;1087:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1077:55;;;;;;1062:70;;745:402;-1:-1:-1;680:3:3;;642:515;;;-1:-1:-1;1249:20:3;;;;497:779;-1:-1:-1;;;497:779:3:o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;1035:303:33:-;1128:7;1325:4;1274:56;;;;;;;;:::i;1064:2068:2:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:2;;;;;;;:::i;1199:94::-;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:2;;;;;;;:::i;2642:154::-;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:2;;;;;;;:::i;2806:93::-;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:2;;-1:-1:-1;;3010:24:2;;;-1:-1:-1;;;;;;;3052:20:2;;3044:57;;;;-1:-1:-1;;;3044:57:2;;;;;;;:::i;:::-;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:2:o;1291:198:32:-;1414:4;1437:45;1455:7;1464:9;1475:6;1437:17;:45::i;992:293::-;1092:4;1113:12;1127:23;1166:9;-1:-1:-1;;;;;1166:14:32;1188:6;1166:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:87;;;;1209:48;1237:7;1246:10;1209:27;:48::i;:::-;-1:-1:-1;1274:4:32;;992:293;-1:-1:-1;;;;992:293:32:o;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;1648:374:34:-;1766:4;1801:214;1827:7;1946:9;1977:6;1852:149;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1852:149:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1852:149:34;-1:-1:-1;;;1852:149:34;;;1801:8;:214::i;-1:-1:-1:-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;:::i;470:352::-;;;600:3;593:4;585:6;581:17;577:27;567:2;;-1:-1;;608:12;567:2;-1:-1;638:20;;-1:-1;;;;;667:30;;664:2;;;-1:-1;;700:12;664:2;744:4;736:6;732:17;720:29;;795:3;744:4;;779:6;775:17;736:6;761:32;;758:41;755:2;;;812:1;;802:12;755:2;560:262;;;;;:::o;4552:336::-;;;4666:3;4659:4;4651:6;4647:17;4643:27;4633:2;;-1:-1;;4674:12;4633:2;-1:-1;4704:20;;-1:-1;;;;;4733:30;;4730:2;;;-1:-1;;4766:12;4730:2;4810:4;4802:6;4798:17;4786:29;;4861:3;4810:4;4841:17;4802:6;4827:32;;4824:41;4821:2;;;4878:1;;4868:12;6075:168;;6195:3;6186:6;6181:3;6177:16;6173:26;6170:2;;;-1:-1;;6202:12;6170:2;-1:-1;6222:15;6163:80;-1:-1;6163:80::o;6299:169::-;;6420:3;6411:6;6406:3;6402:16;6398:26;6395:2;;;-1:-1;;6427:12;6503:164;;6619:3;6610:6;6605:3;6601:16;6597:26;6594:2;;;-1:-1;;6626:12;6952:241;;7056:2;7044:9;7035:7;7031:23;7027:32;7024:2;;;-1:-1;;7062:12;7024:2;85:6;72:20;97:33;124:5;97:33;:::i;7464:366::-;;;7585:2;7573:9;7564:7;7560:23;7556:32;7553:2;;;-1:-1;;7591:12;7553:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7643:63;-1:-1;7743:2;7782:22;;72:20;97:33;72:20;97:33;:::i;:::-;7751:63;;;;7547:283;;;;;:::o;7837:507::-;;;;7983:2;7971:9;7962:7;7958:23;7954:32;7951:2;;;-1:-1;;7989:12;7951:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8041:63;-1:-1;8141:2;8180:22;;72:20;97:33;72:20;97:33;:::i;:::-;8149:63;-1:-1;8249:2;8296:22;;217:20;242:41;217:20;242:41;:::i;:::-;8257:71;;;;7945:399;;;;;:::o;8351:366::-;;;8472:2;8460:9;8451:7;8447:23;8443:32;8440:2;;;-1:-1;;8478:12;8440:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8530:63;8630:2;8669:22;;;;6741:20;;-1:-1;;;8434:283::o;8724:257::-;;8836:2;8824:9;8815:7;8811:23;8807:32;8804:2;;;-1:-1;;8842:12;8804:2;4347:6;4341:13;95112:5;92344:13;92337:21;95090:5;95087:32;95077:2;;-1:-1;;95123:12;8988:241;;9092:2;9080:9;9071:7;9067:23;9063:32;9060:2;;;-1:-1;;9098:12;9060:2;-1:-1;4468:20;;9054:175;-1:-1;9054:175::o;9236:292::-;;9365:3;9353:9;9344:7;9340:23;9336:33;9333:2;;;-1:-1;;9372:12;9333:2;5067:20;5082:4;5067:20;:::i;:::-;2714:3;2707:4;2699:6;2695:17;2691:27;2681:2;;-1:-1;;2722:12;2681:2;2775:78;5082:4;2775:78;:::i;:::-;2859:16;2918:17;5082:4;2951:3;2947:27;2976:3;2947:27;2944:36;2941:2;;;-1:-1;;2983:12;2941:2;-1:-1;3003:206;2756:4;3025:1;3022:13;3003:206;;;6741:20;;3096:50;;84823:4;3160:14;;;;3188;;;;3050:1;3043:9;3003:206;;;3007:14;5171:72;5153:16;5146:98;980:3;961:17;2951:3;961:17;957:27;947:2;;-1:-1;;988:12;947:2;1041:86;5082:4;1041:86;:::i;:::-;1133:16;-1:-1;1133:16;;-1:-1;1192:17;-1:-1;9365:3;1221:27;;1218:36;-1:-1;1215:2;;;-1:-1;;1257:12;1215:2;-1:-1;1277:214;2756:4;1299:1;1296:13;1277:214;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;1370:58;;84823:4;1442:14;;;;1470;;;;;3050:1;1317:9;1277:214;;;-1:-1;;84823:4;5318:16;;5311:106;-1:-1;5322:5;9327:201;-1:-1;;;9327:201::o;9535:314::-;;9675:3;9663:9;9654:7;9650:23;9646:33;9643:2;;;-1:-1;;9682:12;9643:2;5627:20;5642:4;5627:20;:::i;:::-;3368:3;3361:4;3353:6;3349:17;3345:27;3335:2;;-1:-1;;3376:12;3335:2;3429:78;5642:4;3429:78;:::i;:::-;3513:16;3572:17;5642:4;3605:3;3601:27;3630:3;3601:27;3598:36;3595:2;;;-1:-1;;3637:12;3595:2;-1:-1;3657:217;3410:4;3679:1;3676:13;3657:217;;;6889:13;;3750:61;;84823:4;3825:14;;;;3853;;;;3704:1;3697:9;3657:217;;;3661:14;5731:83;5713:16;5706:109;1666:3;1647:17;3605:3;1647:17;1643:27;1633:2;;-1:-1;;1674:12;1633:2;1727:86;5642:4;1727:86;:::i;:::-;1819:16;-1:-1;1819:16;;-1:-1;1878:17;-1:-1;9675:3;1907:27;;1904:36;-1:-1;1901:2;;;-1:-1;;1943:12;1901:2;-1:-1;1963:225;3410:4;1985:1;1982:13;1963:225;;;387:6;381:13;399:41;434:5;399:41;:::i;:::-;2056:69;;84823:4;2139:14;;;;2167;;;;;3704:1;2003:9;1963:225;;9856:961;;;;;;10100:2;10088:9;10079:7;10075:23;10071:32;10068:2;;;-1:-1;;10106:12;10068:2;10164:17;10151:31;-1:-1;;;;;10202:18;10194:6;10191:30;10188:2;;;-1:-1;;10224:12;10188:2;10254:89;10335:7;10326:6;10315:9;10311:22;10254:89;:::i;:::-;10244:99;;10408:2;10397:9;10393:18;10380:32;10366:46;;10202:18;10424:6;10421:30;10418:2;;;-1:-1;;10454:12;10418:2;10492:80;10564:7;10555:6;10544:9;10540:22;10492:80;:::i;:::-;10474:98;;-1:-1;10474:98;-1:-1;10637:2;10622:18;;10609:32;;-1:-1;10650:30;;;10647:2;;;-1:-1;;10683:12;10647:2;;10721:80;10793:7;10784:6;10773:9;10769:22;10721:80;:::i;:::-;10062:755;;;;-1:-1;10062:755;;-1:-1;10703:98;;;10062:755;-1:-1;;;10062:755::o;10824:897::-;;;;;;11036:2;11024:9;11015:7;11011:23;11007:32;11004:2;;;-1:-1;;11042:12;11004:2;11100:17;11087:31;-1:-1;;;;;11138:18;11130:6;11127:30;11124:2;;;-1:-1;;11160:12;11124:2;11190:89;11271:7;11262:6;11251:9;11247:22;11190:89;:::i;:::-;11180:99;;11344:2;11333:9;11329:18;11316:32;11302:46;;11138:18;11360:6;11357:30;11354:2;;;-1:-1;;11390:12;11354:2;11428:64;11484:7;11475:6;11464:9;11460:22;11428:64;:::i;:::-;11410:82;;-1:-1;11410:82;-1:-1;11557:2;11542:18;;11529:32;;-1:-1;11570:30;;;11567:2;;;-1:-1;;11603:12;11567:2;;11641:64;11697:7;11688:6;11677:9;11673:22;11641:64;:::i;11728:598::-;;;;11921:3;11909:9;11900:7;11896:23;11892:33;11889:2;;;-1:-1;;11928:12;11889:2;11990:90;12072:7;12048:22;11990:90;:::i;:::-;11980:100;;12145:3;12134:9;12130:19;12117:33;-1:-1;;;;;12162:6;12159:30;12156:2;;;-1:-1;;12192:12;12156:2;12230:80;12302:7;12293:6;12282:9;12278:22;12230:80;:::i;:::-;11883:443;;12212:98;;-1:-1;12212:98;;-1:-1;;;;11883:443::o;12333:1066::-;;;;;;;;12582:3;12570:9;12561:7;12557:23;12553:33;12550:2;;;-1:-1;;12589:12;12550:2;12651:90;12733:7;12709:22;12651:90;:::i;:::-;12641:100;;12806:3;12795:9;12791:19;12778:33;-1:-1;;;;;12831:18;12823:6;12820:30;12817:2;;;-1:-1;;12853:12;12817:2;12891:64;12947:7;12938:6;12927:9;12923:22;12891:64;:::i;:::-;12873:82;;-1:-1;12873:82;-1:-1;13020:3;13005:19;;12992:33;;-1:-1;13034:30;;;13031:2;;;-1:-1;;13067:12;13031:2;13105:64;13161:7;13152:6;13141:9;13137:22;13105:64;:::i;:::-;13087:82;;-1:-1;13087:82;-1:-1;13234:3;13219:19;;13206:33;;-1:-1;13248:30;;;13245:2;;;-1:-1;;13281:12;13245:2;;13319:64;13375:7;13366:6;13355:9;13351:22;13319:64;:::i;:::-;12544:855;;;;-1:-1;12544:855;;-1:-1;12544:855;;;;13301:82;;-1:-1;;;12544:855::o;13406:391::-;;13542:2;13530:9;13521:7;13517:23;13513:32;13510:2;;;-1:-1;;13548:12;13510:2;13606:17;13593:31;-1:-1;;;;;13636:6;13633:30;13630:2;;;-1:-1;;13666:12;13630:2;13696:85;13773:7;13764:6;13753:9;13749:22;13696:85;:::i;13804:889::-;;;;;;14012:2;14000:9;13991:7;13987:23;13983:32;13980:2;;;-1:-1;;14018:12;13980:2;14076:17;14063:31;-1:-1;;;;;14114:18;14106:6;14103:30;14100:2;;;-1:-1;;14136:12;14100:2;14166:85;14243:7;14234:6;14223:9;14219:22;14166:85;:::i;14700:263::-;;14815:2;14803:9;14794:7;14790:23;14786:32;14783:2;;;-1:-1;;14821:12;14783:2;-1:-1;6889:13;;14777:186;-1:-1;14777:186::o;15983:127::-;-1:-1;;;;;92662:54;16060:45;;16054:56::o;16378:645::-;;87067:6;87062:3;87055:19;87104:4;;87099:3;87095:14;16515:83;;16683:21;-1:-1;16710:291;16735:6;16732:1;16729:13;16710:291;;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;92662:54;16060:45;;15338:14;;;;88887:12;;;;678:18;16750:9;16710:291;;;-1:-1;17007:10;;16502:521;-1:-1;;;;;16502:521::o;19347:855::-;;87067:6;87062:3;87055:19;87104:4;;87099:3;87095:14;19536:108;;19756:21;-1:-1;19783:397;19808:6;19805:1;19802:13;19783:397;;;20389:4;;93502:3;93497;93484:30;93545:16;;;93538:27;;;40089:16;;;;-1:-1;;18200:321;85812:4;18222:1;18219:13;18200:321;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;-1:-1;;;;;92662:54;16060:45;;89031:12;;;;678:18;18240:9;;;;;15156:14;;18200:321;;;-1:-1;;;15633:4;15624:14;;;;86807;;;;;19830:1;19823:9;19783:397;;21120:447;87055:19;;;21120:447;-1:-1;;;;;21348:78;;21345:2;;;-1:-1;;21429:12;21345:2;87104:4;21464:6;21460:17;93507:6;93502:3;87104:4;87099:3;87095:14;93484:30;93545:16;;;;87104:4;93545:16;93538:27;;;-1:-1;93545:16;;21242:325;-1:-1;21242:325::o;22199:277::-;;87067:6;87062:3;87055:19;93507:6;93502:3;87104:4;87099:3;87095:14;93484:30;-1:-1;87104:4;93554:6;87099:3;93545:16;;93538:27;87104:4;94519:7;;94523:2;22462:6;94503:14;94499:28;87099:3;22431:39;;22424:46;;22289:187;;;;;:::o;23153:343::-;;23295:5;86158:12;87067:6;87062:3;87055:19;23388:52;23433:6;87104:4;87099:3;87095:14;87104:4;23414:5;23410:16;23388:52;:::i;:::-;94519:7;94503:14;-1:-1;;94499:28;23452:39;;;;87104:4;23452:39;;23243:253;-1:-1;;23243:253::o;39568:692::-;20389:4;93502:3;93497;93484:30;93563:1;20389:4;93545:16;;;93538:27;;;40089:16;;;;18200:321;85812:4;18222:1;18219:13;18200:321;;;89040:2;230:6;217:20;242:41;277:5;242:41;:::i;:::-;-1:-1;;;;;92662:54;16060:45;;89031:12;;;;15156:14;;;;678:18;18240:9;18200:321;;;18204:14;;;39676:584;;:::o;42812:1345::-;43049:23;;21848:37;;43289:4;43278:16;;43272:23;43439:4;43430:14;;21848:37;43517:4;43506:16;;43500:23;43667:4;43658:14;;21848:37;43750:4;43739:16;;43733:23;43900:4;43891:14;;21848:37;43980:4;43969:16;43963:23;44130:4;44121:14;;;21848:37;42939:1218::o;44253:3170::-;;44424:6;88896:2;44535:16;88887:12;44558:63;44606:14;88861:39;88887:12;44535:16;88861:39;:::i;:::-;44558:63;:::i;:::-;44684:50;44717:16;44710:5;44684:50;:::i;:::-;44664:70;;44740:63;88896:2;44792:3;44788:14;44774:12;44740:63;:::i;:::-;;44864:50;44908:4;44901:5;44897:16;44890:5;44864:50;:::i;:::-;44920:63;44908:4;44972:3;44968:14;44954:12;44920:63;:::i;:::-;;45063:77;45134:4;45127:5;45123:16;45116:5;45063:77;:::i;:::-;44424:6;45134:4;45164:3;45160:14;45153:38;45206:119;44424:6;44419:3;44415:16;45306:12;45292;45206:119;:::i;:::-;45198:127;;;;45411:104;45509:4;45502:5;45498:16;45491:5;45411:104;:::i;:::-;45561:3;45555:4;45551:14;45509:4;45539:3;45535:14;45528:38;45581:171;45747:4;45733:12;45719;45581:171;:::i;:::-;45573:179;;;;45848:77;45919:4;45912:5;45908:16;45901:5;45848:77;:::i;:::-;45971:3;45965:4;45961:14;45919:4;45949:3;45945:14;45938:38;45991:119;46105:4;46091:12;46077;45991:119;:::i;:::-;45983:127;;;;46206:77;46277:4;46270:5;46266:16;46259:5;46206:77;:::i;:::-;46329:3;46323:4;46319:14;46277:4;46307:3;46303:14;46296:38;46349:119;46463:4;46449:12;46435;46349:119;:::i;:::-;46341:127;;;;46558:77;46629:4;46622:5;46618:16;46611:5;46558:77;:::i;:::-;46681:3;46675:4;46671:14;46629:4;46659:3;46655:14;46648:38;46701:119;46815:4;46801:12;46787;46701:119;:::i;:::-;46935:6;46924:18;;;6741:20;46997:16;;;21848:37;47121:6;47110:18;;;6741:20;47183:16;;;21848:37;47312:6;47301:18;;;4468:20;47374:16;;;;21848:37;;;;-1:-1;46693:127;;44397:3026;-1:-1;;;44397:3026::o;47521:1977::-;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;92662:54;;;16060:45;;88896:2;88887:12;;;4468:20;48055:14;;;21848:37;48190:4;48179:16;;72:20;;97:33;72:20;97:33;:::i;:::-;92662:54;48190:4;48250:14;;16060:45;48332:50;48376:4;48365:16;;48369:5;48332:50;:::i;:::-;48388:63;48376:4;48440:3;48436:14;48422:12;48388:63;:::i;:::-;;48518:50;48562:4;48555:5;48551:16;48544:5;48518:50;:::i;:::-;48574:63;48562:4;48626:3;48622:14;48608:12;48574:63;:::i;:::-;;48702:50;48746:4;48739:5;48735:16;48728:5;48702:50;:::i;:::-;48758:63;48746:4;48810:3;48806:14;48792:12;48758:63;:::i;:::-;;48969:115;48957:4;49073:3;49069:14;48957:4;48950:5;48946:16;48969:115;:::i;:::-;49201:6;49190:18;;;6741:20;49263:16;;;21848:37;49398:6;49387:18;;;4468:20;49460:16;;21848:37;47659:1839::o;50362:896::-;50606:23;;21848:37;;50862:4;50851:16;;50845:23;51012:4;51003:14;;21848:37;51090:4;51079:16;51073:23;91873:4;91862:16;92344:13;92337:21;51231:4;51222:14;;;21630:34;50495:763::o;51314:1632::-;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;92662:54;;;16060:45;;88896:2;88887:12;;72:20;;97:33;72:20;97:33;:::i;:::-;92662:54;;;88896:2;51841:14;;16060:45;88887:12;;;72:20;;97:33;72:20;97:33;:::i;:::-;92673:42;92666:5;92662:54;88887:12;52055:3;52051:14;16060:45;52174:4;52167:5;52163:16;6741:20;52174:4;52238:3;52234:14;21848:37;52356:4;52349:5;52345:16;6741:20;52356:4;52420:3;52416:14;21848:37;52539:4;52532:5;52528:16;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;92662:54;52539:4;52599:14;;16060:45;52749:4;52738:16;;91145:17;91210:14;91206:29;;;-1:-1;;91202:48;91178:73;;91168:2;;-1:-1;;91255:12;91168:2;91284:33;;91339:19;;-1:-1;;;;;91398:30;;91395:2;;;-1:-1;;91431:12;91395:2;91488:17;91210:14;91468:38;91458:8;91454:53;91451:2;;;-1:-1;;91510:12;91451:2;51477:4;52749;52779:3;52775:14;52768:38;52821:87;51477:4;51472:3;51468:14;52889:12;88896:2;91377:5;91373:16;52821:87;:::i;53297:392::-;21848:37;;;53550:2;53541:12;;21848:37;53652:12;;;53441:248::o;53696:291::-;;93507:6;93502:3;93497;93484:30;93545:16;;93538:27;;;93545:16;53840:147;-1:-1;53840:147::o;53994:271::-;;23663:5;86158:12;23774:52;23819:6;23814:3;23807:4;23800:5;23796:16;23774:52;:::i;:::-;23838:16;;;;;54128:137;-1:-1;;54128:137::o;54272:520::-;35238:66;35218:87;;35202:2;35324:12;;21848:37;;;;54755:12;;;54489:303::o;54799:379::-;55163:10;54987:191::o;55185:222::-;-1:-1;;;;;92662:54;;;;16060:45;;55312:2;55297:18;;55283:124::o;55414:771::-;-1:-1;;;;;92662:54;;15913:58;;55736:3;55863:2;55848:18;;55841:48;;;55414:771;;55903:128;;55721:19;;56017:6;55903:128;:::i;:::-;55895:136;;56042:133;56171:2;56160:9;56156:18;56147:6;56042:133;:::i;56192:1051::-;-1:-1;;;;;92662:54;;15913:58;;56602:3;56729:2;56714:18;;56707:48;;;56192:1051;;56769:128;56587:19;;;56883:6;56769:128;:::i;:::-;56761:136;;56908:133;57037:2;57026:9;57022:18;57013:6;56908:133;:::i;:::-;57090:9;57084:4;57080:20;57074:3;57063:9;57059:19;57052:49;57115:118;57228:4;57219:6;57211;57115:118;:::i;:::-;57107:126;56573:670;-1:-1;;;;;;;;56573:670::o;57250:740::-;-1:-1;;;;;92662:54;;15913:58;;57580:3;57565:19;;57685:144;57825:2;57810:18;;57801:6;57685:144;:::i;:::-;57840:140;57975:3;57964:9;57960:19;57951:6;57840:140;:::i;57997:1384::-;-1:-1;;;;;92662:54;;15913:58;;57997:1384;58517:3;58762:2;58622:144;58747:18;;;58738:6;58622:144;:::i;:::-;58777:140;58912:3;58901:9;58897:19;58888:6;58777:140;:::i;:::-;58517:3;58950;58939:9;58935:19;58928:49;58991:86;58517:3;58506:9;58502:19;59063:6;59055;58991:86;:::i;:::-;58983:94;;59126:9;59120:4;59116:20;59110:3;59099:9;59095:19;59088:49;59151:86;59232:4;59223:6;59215;59151:86;:::i;:::-;41265:23;;59143:94;;-1:-1;41265:23;-1:-1;20826:1;59366:3;59351:19;;20811:258;85812:4;20833:1;20830:13;20811:258;;;20897:13;;21848:37;;86419:14;;;;20858:1;20851:9;;;;;15806:14;;20811:258;;;20815:14;;58762:2;41473:5;41469:16;41463:23;41443:43;;41602:14;59355:9;41602:14;20826:1;19000:282;85812:4;19022:1;19019:13;19000:282;;;92136:24;19092:6;19086:13;92136:24;:::i;:::-;16060:45;;86419:14;;;;15156;;;;20858:1;19040:9;19000:282;;;19004:14;;;;58488:893;;;;;;;;;;;:::o;59388:444::-;-1:-1;;;;;92662:54;;;16060:45;;92662:54;;;;59735:2;59720:18;;16060:45;59818:2;59803:18;;21848:37;;;;59571:2;59556:18;;59542:290::o;59839:333::-;-1:-1;;;;;92662:54;;;;16060:45;;60158:2;60143:18;;21848:37;59994:2;59979:18;;59965:207::o;60179:210::-;92344:13;;92337:21;21630:34;;60300:2;60285:18;;60271:118::o;60396:548::-;21848:37;;;91873:4;91862:16;;;;60764:2;60749:18;;53250:35;60847:2;60832:18;;21848:37;60930:2;60915:18;;21848:37;60603:3;60588:19;;60574:370::o;60951:736::-;;61208:2;61229:17;61222:47;61283:76;61208:2;61197:9;61193:18;61345:6;61283:76;:::i;:::-;61407:9;61401:4;61397:20;61392:2;61381:9;61377:18;61370:48;61432:86;61513:4;61504:6;61496;61432:86;:::i;:::-;61424:94;;61566:9;61560:4;61556:20;61551:2;61540:9;61536:18;61529:48;61591:86;61672:4;61663:6;61655;61591:86;:::i;61694:367::-;61866:2;61851:18;;94738:1;94728:12;;94718:2;;94744:9;94718:2;23954:67;;;62047:2;62032:18;21848:37;61837:224;:::o;62068:310::-;;62215:2;62236:17;62229:47;62290:78;62215:2;62204:9;62200:18;62354:6;62290:78;:::i;62385:416::-;62585:2;62599:47;;;24612:2;62570:18;;;87055:19;24648:26;87095:14;;;24628:47;24694:12;;;62556:245::o;62808:416::-;63008:2;63022:47;;;24945:2;62993:18;;;87055:19;24981:34;87095:14;;;24961:55;-1:-1;;;25036:12;;;25029:28;25076:12;;;62979:245::o;63231:416::-;63431:2;63445:47;;;25327:2;63416:18;;;87055:19;25363:32;87095:14;;;25343:53;25415:12;;;63402:245::o;63654:416::-;63854:2;63868:47;;;25666:2;63839:18;;;87055:19;25702:31;87095:14;;;25682:52;25753:12;;;63825:245::o;64077:416::-;64277:2;64291:47;;;26004:2;64262:18;;;87055:19;-1:-1;;;87095:14;;;26020:41;26080:12;;;64248:245::o;64500:416::-;64700:2;64714:47;;;26331:2;64685:18;;;87055:19;26367:33;87095:14;;;26347:54;26420:12;;;64671:245::o;64923:416::-;65123:2;65137:47;;;26671:2;65108:18;;;87055:19;26707:31;87095:14;;;26687:52;26758:12;;;65094:245::o;65346:416::-;65546:2;65560:47;;;65531:18;;;87055:19;27045:34;87095:14;;;27025:55;27099:12;;;65517:245::o;65769:416::-;65969:2;65983:47;;;27350:2;65954:18;;;87055:19;27386:33;87095:14;;;27366:54;27439:12;;;65940:245::o;66192:416::-;66392:2;66406:47;;;27690:2;66377:18;;;87055:19;27726:31;87095:14;;;27706:52;27777:12;;;66363:245::o;66615:416::-;66815:2;66829:47;;;28028:2;66800:18;;;87055:19;28064:27;87095:14;;;28044:48;28111:12;;;66786:245::o;67038:416::-;67238:2;67252:47;;;28362:2;67223:18;;;87055:19;28398:33;87095:14;;;28378:54;28451:12;;;67209:245::o;67461:416::-;67661:2;67675:47;;;28702:2;67646:18;;;87055:19;28738:29;87095:14;;;28718:50;28787:12;;;67632:245::o;67884:416::-;68084:2;68098:47;;;29038:2;68069:18;;;87055:19;29074:34;87095:14;;;29054:55;-1:-1;;;29129:12;;;29122:33;29174:12;;;68055:245::o;68307:416::-;68507:2;68521:47;;;29425:2;68492:18;;;87055:19;29461:33;87095:14;;;29441:54;29514:12;;;68478:245::o;68730:416::-;68930:2;68944:47;;;29765:2;68915:18;;;87055:19;29801:33;87095:14;;;29781:54;29854:12;;;68901:245::o;69153:416::-;69353:2;69367:47;;;30105:2;69338:18;;;87055:19;30141:34;87095:14;;;30121:55;-1:-1;;;30196:12;;;30189:26;30234:12;;;69324:245::o;69576:416::-;69776:2;69790:47;;;30485:2;69761:18;;;87055:19;30521:34;87095:14;;;30501:55;-1:-1;;;30576:12;;;30569:32;30620:12;;;69747:245::o;69999:416::-;70199:2;70213:47;;;30871:2;70184:18;;;87055:19;30907:30;87095:14;;;30887:51;30957:12;;;70170:245::o;70422:416::-;70622:2;70636:47;;;31208:2;70607:18;;;87055:19;31244:30;87095:14;;;31224:51;31294:12;;;70593:245::o;70845:416::-;71045:2;71059:47;;;31545:2;71030:18;;;87055:19;31581:34;87095:14;;;31561:55;-1:-1;;;31636:12;;;31629:25;31673:12;;;71016:245::o;71268:416::-;71468:2;71482:47;;;31924:2;71453:18;;;87055:19;31960:31;87095:14;;;31940:52;32011:12;;;71439:245::o;71691:416::-;71891:2;71905:47;;;32262:2;71876:18;;;87055:19;32298:28;87095:14;;;32278:49;32346:12;;;71862:245::o;72114:416::-;72314:2;72328:47;;;32597:2;72299:18;;;87055:19;32633:34;87095:14;;;32613:55;-1:-1;;;32688:12;;;32681:26;32726:12;;;72285:245::o;72537:416::-;72737:2;72751:47;;;32977:2;72722:18;;;87055:19;33013:34;87095:14;;;32993:55;-1:-1;;;33068:12;;;33061:25;33105:12;;;72708:245::o;72960:416::-;73160:2;73174:47;;;33356:2;73145:18;;;87055:19;33392:34;87095:14;;;33372:55;-1:-1;;;33447:12;;;33440:29;33488:12;;;73131:245::o;73383:416::-;73583:2;73597:47;;;33739:2;73568:18;;;87055:19;33775:34;87095:14;;;33755:55;-1:-1;;;33830:12;;;33823:25;33867:12;;;73554:245::o;73806:416::-;74006:2;74020:47;;;34118:2;73991:18;;;87055:19;-1:-1;;;87095:14;;;34134:40;34193:12;;;73977:245::o;74229:416::-;74429:2;74443:47;;;34444:2;74414:18;;;87055:19;34480:33;87095:14;;;34460:54;34533:12;;;74400:245::o;74652:416::-;74852:2;74866:47;;;34784:2;74837:18;;;87055:19;34820:34;87095:14;;;34800:55;-1:-1;;;34875:12;;;34868:28;34915:12;;;74823:245::o;75075:416::-;75275:2;75289:47;;;35575:2;75260:18;;;87055:19;-1:-1;;;87095:14;;;35591:38;35648:12;;;75246:245::o;75498:416::-;75698:2;75712:47;;;35899:2;75683:18;;;87055:19;35935:32;87095:14;;;35915:53;35987:12;;;75669:245::o;75921:416::-;76121:2;76135:47;;;36238:2;76106:18;;;87055:19;36274:34;87095:14;;;36254:55;-1:-1;;;36329:12;;;36322:33;36374:12;;;76092:245::o;76344:416::-;76544:2;76558:47;;;36625:2;76529:18;;;87055:19;36661:26;87095:14;;;36641:47;36707:12;;;76515:245::o;76767:416::-;76967:2;76981:47;;;37263:2;76952:18;;;87055:19;-1:-1;;;87095:14;;;37279:45;37343:12;;;76938:245::o;77190:416::-;77390:2;77404:47;;;37594:2;77375:18;;;87055:19;37630:34;87095:14;;;37610:55;-1:-1;;;37685:12;;;37678:27;37724:12;;;77361:245::o;77613:416::-;77813:2;77827:47;;;37975:2;77798:18;;;87055:19;38011:34;87095:14;;;37991:55;-1:-1;;;38066:12;;;38059:25;38103:12;;;77784:245::o;78036:416::-;78236:2;78250:47;;;78221:18;;;87055:19;38390:34;87095:14;;;38370:55;38444:12;;;78207:245::o;78459:416::-;78659:2;78673:47;;;38695:2;78644:18;;;87055:19;38731:28;87095:14;;;38711:49;38779:12;;;78630:245::o;78882:416::-;79082:2;79096:47;;;79067:18;;;87055:19;39066:34;87095:14;;;39046:55;39120:12;;;79053:245::o;79305:416::-;79505:2;79519:47;;;39371:2;79490:18;;;87055:19;39407:34;87095:14;;;39387:55;-1:-1;;;39462:12;;;39455:29;39503:12;;;79476:245::o;79728:327::-;79907:3;79892:19;;79922:123;79896:9;80018:6;79922:123;:::i;80062:351::-;;80253:3;80242:9;80238:19;80230:27;;41971:16;41965:23;21855:3;21848:37;42137:4;42130:5;42126:16;42120:23;42137:4;42201:3;42197:14;21848:37;42297:4;42290:5;42286:16;42280:23;42297:4;42361:3;42357:14;21848:37;42462:4;42455:5;42451:16;42445:23;42462:4;42526:3;42522:14;21848:37;42624:4;42617:5;42613:16;42607:23;42624:4;42688:3;42684:14;21848:37;80224:189;;;;:::o;80420:410::-;;80617:2;80638:17;80631:47;80692:128;80617:2;80606:9;80602:18;80806:6;80692:128;:::i;80837:367::-;81036:3;81021:19;;81051:143;81025:9;81167:6;81051:143;:::i;81211:354::-;49830:23;;21848:37;;50018:4;50007:16;;;50001:23;50078:14;;;21848:37;50178:4;50167:16;;;50161:23;92344:13;92337:21;50232:14;;;21630:34;;;;81404:2;81389:18;;81375:190::o;81572:394::-;;81761:2;81782:17;81775:47;81836:120;81761:2;81750:9;81746:18;81942:6;81836:120;:::i;81973:505::-;;82190:2;82211:17;82204:47;82265:120;82190:2;82179:9;82175:18;82371:6;82265:120;:::i;:::-;82257:128;;21878:5;82464:2;82453:9;82449:18;21848:37;82161:317;;;;;:::o;82485:222::-;21848:37;;;82612:2;82597:18;;82583:124::o;82714:522::-;;;82865:11;82852:25;91202:48;;82940:8;82924:14;82920:29;82916:48;82896:18;82892:73;82882:2;;-1:-1;;82969:12;82882:2;82996:33;;83050:18;;;-1:-1;;;;;;83077:30;;83074:2;;;-1:-1;;83110:12;83074:2;82955:4;83138:13;;;;-1:-1;83190:17;;82924:14;83170:38;83160:49;;83157:2;;;83222:1;;83212:12;83243:549;;;83421:11;83408:25;91202:48;;83496:8;83480:14;83476:29;83472:48;83452:18;83448:73;83438:2;;-1:-1;;83525:12;83438:2;83552:33;;83606:18;;;-1:-1;;;;;;83633:30;;83630:2;;;-1:-1;;83666:12;83630:2;83511:4;83694:13;;-1:-1;83758:4;83746:17;;83480:14;83726:38;83716:49;;83713:2;;;83778:1;;83768:12;84328:256;84390:2;84384:9;84416:17;;;-1:-1;;;;;84476:34;;84512:22;;;84473:62;84470:2;;;84548:1;;84538:12;84470:2;84390;84557:22;84368:216;;-1:-1;84368:216::o;88787:119::-;;85:6;72:20;97:33;124:5;97:33;:::i;89059:517::-;;;89199:3;89186:17;91202:48;;89267:8;89251:14;89247:29;89243:48;89223:18;89219:73;89209:2;;-1:-1;;89296:12;89209:2;89325:33;;89282:4;89414:16;;;-1:-1;89380:19;;-1:-1;;;;;;89439:30;;89436:2;;;89482:1;;89472:12;89436:2;89282:4;89533:6;89529:17;89251:14;89509:38;89499:8;89495:53;89492:2;;;89561:1;;89551:12;89710:544;;;89877:3;89864:17;91202:48;;89945:8;89929:14;89925:29;89921:48;89901:18;89897:73;89887:2;;-1:-1;;89974:12;89887:2;90003:33;;89960:4;90092:16;;;-1:-1;90058:19;;-1:-1;;;;;;90117:30;;90114:2;;;90160:1;;90150:12;90114:2;90219:4;90211:6;90207:17;89929:14;90187:38;90177:8;90173:53;90170:2;;;90239:1;;90229:12;92600:121;-1:-1;;;;;92662:54;;92645:76::o;93580:268::-;93645:1;93652:101;93666:6;93663:1;93660:13;93652:101;;;93733:11;;;93727:18;93714:11;;;93707:39;93688:2;93681:10;93652:101;;;93768:6;93765:1;93762:13;93759:2;;;-1:-1;;93645:1;93815:16;;93808:27;93629:219::o;94767:117::-;-1:-1;;;;;92662:54;;94826:35;;94816:2;;94875:1;;94865:12;94816:2;94810:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "3275600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "infinite",
                "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "infinite",
                "depositAlice(address,uint256)": "infinite",
                "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "infinite",
                "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "infinite",
                "exit(address,address,address)": "infinite",
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "getChannelDispute()": "infinite",
                "getDefundNonce(address)": "infinite",
                "getExitableAmount(address,address)": "infinite",
                "getTotalDepositsAlice(address)": "infinite",
                "getTotalDepositsBob(address)": "infinite",
                "getTotalTransferred(address)": "infinite",
                "getTransferDispute(bytes32)": "infinite",
                "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "infinite",
                "lock()": "1138",
                "setup(address,address)": "infinite",
                "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "infinite"
              }
            },
            "methodIdentifiers": {
              "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "4d3fcbda",
              "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "072f25fd",
              "depositAlice(address,uint256)": "635ae901",
              "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "c60939be",
              "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "5fd334d9",
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getChannelDispute()": "f19eb10e",
              "getDefundNonce(address)": "e7283a8d",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8",
              "getTotalTransferred(address)": "cefa5122",
              "getTransferDispute(bytes32)": "3ff0da16",
              "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "8c048fc2",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79",
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "2c889aa1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"}],\"name\":\"ChannelDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"ChannelDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedInitialState\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"indexed\":false,\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"TransferDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"TransferDisputed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"defundChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedInitialTransferState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedTransferResolver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responderSignature\",\"type\":\"bytes\"}],\"name\":\"defundTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"disputeChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProofData\",\"type\":\"bytes32[]\"}],\"name\":\"disputeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChannelDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getDefundNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"getTransferDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"}],\"name\":\"getWithdrawalTransactionRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}},\"withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)\":{\"params\":{\"aliceSignature\":\"Signature of owner a\",\"bobSignature\":\"Signature of owner b\",\"wd\":\"The withdraw data consisting of semantic withdraw information, i.e. assetId, recipient, and amount; information to make an optional call in addition to the actual transfer, i.e. target address for the call and call payload; additional information, i.e. channel address and nonce.\"}}},\"title\":\"ChannelMastercopy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"Contains the logic used by all Vector multisigs. A proxy to this         contract is deployed per-channel using the ChannelFactory.sol.         Supports channel adjudication logic, deposit logic, and arbitrary         calls when a commitment is double-signed.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/ChannelMastercopy.sol\":\"ChannelMastercopy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"},\"@openzeppelin/contracts/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle trees (hash trees),\\n */\\nlibrary MerkleProof {\\n    /**\\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n     * defined by `root`. For this, a `proof` must be provided, containing\\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\\n     */\\n    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\\n        bytes32 computedHash = leaf;\\n\\n        for (uint256 i = 0; i < proof.length; i++) {\\n            bytes32 proofElement = proof[i];\\n\\n            if (computedHash <= proofElement) {\\n                // Hash(current computed hash + current element of the proof)\\n                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n            } else {\\n                // Hash(current element of the proof + current computed hash)\\n                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n            }\\n        }\\n\\n        // Check if the computed hash (root) is equal to the provided root\\n        return computedHash == root;\\n    }\\n}\\n\",\"keccak256\":\"0x4959be2683e7af3439cb94f06aa6c40cb42ca9336747d0c7dce54f07196489bc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/CMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/Commitment.sol\\\";\\nimport \\\"./interfaces/ICMCAdjudicator.sol\\\";\\nimport \\\"./interfaces/ITransferDefinition.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./CMCDeposit.sol\\\";\\nimport \\\"./lib/LibChannelCrypto.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/cryptography/MerkleProof.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\n/// @title CMCAdjudicator\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic for disputing a single channel and all active\\n///         transfers associated with the channel. Contains two major phases:\\n///         (1) consensus: settle on latest channel state\\n///         (2) defund: remove assets and dispute active transfers\\ncontract CMCAdjudicator is CMCCore, CMCAsset, CMCDeposit, ICMCAdjudicator {\\n    using LibChannelCrypto for bytes32;\\n    using LibMath for uint256;\\n    using SafeMath for uint256;\\n\\n    uint256 private constant INITIAL_DEFUND_NONCE = 1;\\n\\n    ChannelDispute private channelDispute;\\n    mapping(address => uint256) private defundNonces;\\n    mapping(bytes32 => TransferDispute) private transferDisputes;\\n\\n    modifier validateChannel(CoreChannelState calldata ccs) {\\n        require(\\n            ccs.channelAddress == address(this) &&\\n                ccs.alice == alice &&\\n                ccs.bob == bob,\\n            \\\"CMCAdjudicator: INVALID_CHANNEL\\\"\\n        );\\n        _;\\n    }\\n\\n    modifier validateTransfer(CoreTransferState calldata cts) {\\n        require(\\n            cts.channelAddress == address(this),\\n            \\\"CMCAdjudicator: INVALID_TRANSFER\\\"\\n        );\\n        _;\\n    }\\n\\n    function getChannelDispute()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (ChannelDispute memory)\\n    {\\n        return channelDispute;\\n    }\\n\\n    function getDefundNonce(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return defundNonces[assetId];\\n    }\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (TransferDispute memory)\\n    {\\n        return transferDisputes[transferId];\\n    }\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\\n        // Generate hash\\n        bytes32 ccsHash = hashChannelState(ccs);\\n\\n        // Verify Alice's and Bob's signature on the channel state\\n        verifySignaturesOnChannelStateHash(ccs, ccsHash, aliceSignature, bobSignature);\\n\\n        // We cannot dispute a channel in its defund phase\\n        require(!inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // New nonce must be strictly greater than the stored one\\n        require(\\n            channelDispute.nonce < ccs.nonce,\\n            \\\"CMCAdjudicator: INVALID_NONCE\\\"\\n        );\\n\\n        if (!inConsensusPhase()) {\\n            // We are not already in a dispute\\n            // Set expiries\\n            // TODO: offchain-ensure that there can't be an overflow\\n            channelDispute.consensusExpiry = block.timestamp.add(ccs.timeout);\\n            channelDispute.defundExpiry = block.timestamp.add(\\n                ccs.timeout.mul(2)\\n            );\\n        }\\n\\n        // Store newer state\\n        channelDispute.channelStateHash = ccsHash;\\n        channelDispute.nonce = ccs.nonce;\\n        channelDispute.merkleRoot = ccs.merkleRoot;\\n\\n        // Emit event\\n        emit ChannelDisputed(msg.sender, ccs, channelDispute);\\n    }\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\\n        // These checks are not strictly necessary, but it's a bit cleaner this way\\n        require(assetIds.length > 0, \\\"CMCAdjudicator: NO_ASSETS_GIVEN\\\");\\n        require(\\n            indices.length <= assetIds.length,\\n            \\\"CMCAdjudicator: WRONG_ARRAY_LENGTHS\\\"\\n        );\\n\\n        // Verify that the given channel state matches the stored one\\n        require(\\n            hashChannelState(ccs) == channelDispute.channelStateHash,\\n            \\\"CMCAdjudicator: INVALID_CHANNEL_HASH\\\"\\n        );\\n\\n        // We need to be in defund phase for that\\n        require(inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // TODO SECURITY: Beware of reentrancy\\n        // TODO: offchain-ensure that all arrays have the same length:\\n        // assetIds, balances, processedDepositsA, processedDepositsB, defundNonces\\n        // Make sure there are no duplicates in the assetIds -- duplicates are often a source of double-spends\\n\\n        // Defund all assets given\\n        for (uint256 i = 0; i < assetIds.length; i++) {\\n            address assetId = assetIds[i];\\n\\n            // Verify or find the index of the assetId in the ccs.assetIds\\n            uint256 index;\\n            if (i < indices.length) {\\n                // The index was supposedly given -- we verify\\n                index = indices[i];\\n                require(\\n                    assetId == ccs.assetIds[index],\\n                    \\\"CMCAdjudicator: INDEX_MISMATCH\\\"\\n                );\\n            } else {\\n                // we search through the assets in ccs\\n                for (index = 0; index < ccs.assetIds.length; index++) {\\n                    if (assetId == ccs.assetIds[index]) {\\n                        break;\\n                    }\\n                }\\n            }\\n\\n            // Now, if `index`  is equal to the number of assets in ccs,\\n            // then the current asset is not in ccs;\\n            // otherwise, `index` is the index in ccs for the current asset\\n\\n            // Check the assets haven't already been defunded + update the\\n            // defundNonce for that asset\\n            {\\n                // Open a new block to avoid \\\"stack too deep\\\" error\\n                uint256 defundNonce =\\n                    (index == ccs.assetIds.length)\\n                        ? INITIAL_DEFUND_NONCE\\n                        : ccs.defundNonces[index];\\n                require(\\n                    defundNonces[assetId] < defundNonce,\\n                    \\\"CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED\\\"\\n                );\\n                defundNonces[assetId] = defundNonce;\\n            }\\n\\n            // Get total deposits\\n            uint256 tdAlice = _getTotalDepositsAlice(assetId);\\n            uint256 tdBob = _getTotalDepositsBob(assetId);\\n\\n            Balance memory balance;\\n\\n            if (index == ccs.assetIds.length) {\\n                // The current asset is not a part of ccs; refund what has been deposited\\n                balance = Balance({\\n                    amount: [tdAlice, tdBob],\\n                    to: [payable(ccs.alice), payable(ccs.bob)]\\n                });\\n            } else {\\n                // Start with the final balances in ccs\\n                balance = ccs.balances[index];\\n                // Add unprocessed deposits\\n                balance.amount[0] = balance.amount[0].satAdd(\\n                    tdAlice - ccs.processedDepositsA[index]\\n                );\\n                balance.amount[1] = balance.amount[1].satAdd(\\n                    tdBob - ccs.processedDepositsB[index]\\n                );\\n            }\\n\\n            // Add result to exitable amounts\\n            makeBalanceExitable(assetId, balance);\\n        }\\n\\n        emit ChannelDefunded(\\n            msg.sender,\\n            ccs,\\n            channelDispute,\\n            assetIds\\n        );\\n    }\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\\n        // Verify that the given transfer state is included in the \\\"finalized\\\" channel state\\n        bytes32 transferStateHash = hashTransferState(cts);\\n        verifyMerkleProof(\\n            merkleProofData,\\n            channelDispute.merkleRoot,\\n            transferStateHash\\n        );\\n\\n        // The channel needs to be in defund phase for that, i.e. channel state is \\\"finalized\\\"\\n        require(inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // Get stored dispute for this transfer\\n        TransferDispute storage transferDispute =\\n            transferDisputes[cts.transferId];\\n\\n        // Verify that this transfer has not been disputed before\\n        require(\\n            transferDispute.transferDisputeExpiry == 0,\\n            \\\"CMCAdjudicator: TRANSFER_ALREADY_DISPUTED\\\"\\n        );\\n\\n        // Store transfer state and set expiry\\n        transferDispute.transferStateHash = transferStateHash;\\n        // TODO: offchain-ensure that there can't be an overflow\\n        transferDispute.transferDisputeExpiry = block.timestamp.add(\\n            cts.transferTimeout\\n        );\\n\\n        emit TransferDisputed(\\n            msg.sender,\\n            cts,\\n            transferDispute\\n        );\\n    }\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\\n        // Get stored dispute for this transfer\\n        TransferDispute storage transferDispute =\\n            transferDisputes[cts.transferId];\\n\\n        // Verify that a dispute for this transfer has already been started\\n        require(\\n            transferDispute.transferDisputeExpiry != 0,\\n            \\\"CMCAdjudicator: TRANSFER_NOT_DISPUTED\\\"\\n        );\\n\\n        // Verify that the given transfer state matches the stored one\\n        require(\\n            hashTransferState(cts) == transferDispute.transferStateHash,\\n            \\\"CMCAdjudicator: INVALID_TRANSFER_HASH\\\"\\n        );\\n\\n        // We can't defund twice\\n        require(\\n            !transferDispute.isDefunded,\\n            \\\"CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED\\\"\\n        );\\n        transferDispute.isDefunded = true;\\n\\n        Balance memory balance;\\n\\n        if (block.timestamp < transferDispute.transferDisputeExpiry) {\\n            // Ensure the correct hash is provided\\n            require(\\n                keccak256(encodedInitialTransferState) == cts.initialStateHash,\\n                \\\"CMCAdjudicator: INVALID_TRANSFER_HASH\\\"\\n            );\\n            \\n            // Before dispute expiry, responder or responder-authorized\\n            // agent (i.e. watchtower) can resolve\\n            require(\\n                msg.sender == cts.responder || cts.initialStateHash.checkSignature(responderSignature, cts.responder),\\n                \\\"CMCAdjudicator: INVALID_RESOLVER\\\"\\n            );\\n            \\n            ITransferDefinition transferDefinition =\\n                ITransferDefinition(cts.transferDefinition);\\n            balance = transferDefinition.resolve(\\n                abi.encode(cts.balance),\\n                encodedInitialTransferState,\\n                encodedTransferResolver\\n            );\\n            // Verify that returned balances don't exceed initial balances\\n            require(\\n                balance.amount[0].add(balance.amount[1]) <=\\n                    cts.balance.amount[0].add(cts.balance.amount[1]),\\n                \\\"CMCAdjudicator: INVALID_BALANCES\\\"\\n            );\\n        } else {\\n            // After dispute expiry, if the responder hasn't resolved, we defund the initial balance\\n            balance = cts.balance;\\n        }\\n\\n        // Depending on previous code path, defund either resolved or initial balance\\n        makeBalanceExitable(cts.assetId, balance);\\n\\n        // Emit event\\n        emit TransferDefunded(\\n            msg.sender,\\n            cts,\\n            transferDispute,\\n            encodedInitialTransferState,\\n            encodedTransferResolver,\\n            balance\\n        );\\n    }\\n\\n    function verifySignaturesOnChannelStateHash(\\n        CoreChannelState calldata ccs,\\n        bytes32 ccsHash,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) internal pure {\\n        bytes32 commitment =\\n            keccak256(abi.encode(CommitmentType.ChannelState, ccsHash));\\n        require(\\n            commitment.checkSignature(aliceSignature, ccs.alice),\\n            \\\"CMCAdjudicator: INVALID_ALICE_SIG\\\"\\n        );\\n        require(\\n            commitment.checkSignature(bobSignature, ccs.bob),\\n            \\\"CMCAdjudicator: INVALID_BOB_SIG\\\"\\n        );\\n    }\\n\\n    function verifyMerkleProof(\\n        bytes32[] calldata proof,\\n        bytes32 root,\\n        bytes32 leaf\\n    ) internal pure {\\n        require(\\n            MerkleProof.verify(proof, root, leaf),\\n            \\\"CMCAdjudicator: INVALID_MERKLE_PROOF\\\"\\n        );\\n    }\\n\\n    function inConsensusPhase() internal view returns (bool) {\\n        return block.timestamp < channelDispute.consensusExpiry;\\n    }\\n\\n    function inDefundPhase() internal view returns (bool) {\\n        return\\n            channelDispute.consensusExpiry <= block.timestamp &&\\n            block.timestamp < channelDispute.defundExpiry;\\n    }\\n\\n    function hashChannelState(CoreChannelState calldata ccs)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(ccs));\\n    }\\n\\n    function hashTransferState(CoreTransferState calldata cts)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(cts));\\n    }\\n}\\n\",\"keccak256\":\"0x351fb7770cbb6fbb6f3470e63d5a9e93c817722f9c8e2e5c62e38ebf8c6e389b\",\"license\":\"UNLICENSED\"},\"src.sol/CMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCAsset.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/Math.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title CMCAsset\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic to safely transfer channel assets (even if they are\\n///         noncompliant). During adjudication, balances from defunding the\\n///         channel or defunding transfers are registered as withdrawable. Once\\n///         they are registered, the owner (or a watchtower on behalf of the\\n///         owner), may call `exit` to reclaim funds from the multisig.\\n\\ncontract CMCAsset is CMCCore, ICMCAsset {\\n    using SafeMath for uint256;\\n    using LibMath for uint256;\\n\\n    mapping(address => uint256) internal totalTransferred;\\n    mapping(address => mapping(address => uint256))\\n        private exitableAmount;\\n\\n    function registerTransfer(address assetId, uint256 amount) internal {\\n        totalTransferred[assetId] += amount;\\n    }\\n\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return totalTransferred[assetId];\\n    }\\n\\n    function makeExitable(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal {\\n        exitableAmount[assetId][\\n            recipient\\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\\n    }\\n\\n    function makeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) internal {\\n        for (uint256 i = 0; i < 2; i++) {\\n            uint256 amount = balance.amount[i];\\n            if (amount > 0) {\\n                makeExitable(assetId, balance.to[i], amount);\\n            }\\n        }\\n    }\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return exitableAmount[assetId][owner];\\n    }\\n\\n    function getAvailableAmount(address assetId, uint256 maxAmount)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        // Taking the min protects against the case where the multisig\\n        // holds less than the amount that is trying to be withdrawn\\n        // while still allowing the total of the funds to be removed\\n        // without the transaction reverting.\\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\\n    }\\n\\n    function transferAsset(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal {\\n        registerTransfer(assetId, amount);\\n        require(\\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\\n            \\\"CMCAsset: TRANSFER_FAILED\\\"\\n        );\\n    }\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external override onlyViaProxy nonReentrant {\\n        // Either the owner must be the recipient, or in control\\n        // of setting the recipient of the funds to whomever they\\n        // choose\\n        require(\\n            msg.sender == owner || owner == recipient,\\n            \\\"CMCAsset: OWNER_MISMATCH\\\"\\n        );\\n\\n        uint256 amount =\\n            getAvailableAmount(\\n                assetId,\\n                exitableAmount[assetId][owner]\\n            );\\n\\n        // Revert if amount is 0\\n        require(amount > 0, \\\"CMCAsset: NO_OP\\\");\\n\\n        // Reduce the amount claimable from the multisig by the owner\\n        exitableAmount[assetId][\\n            owner\\n        ] = exitableAmount[assetId][owner].sub(amount);\\n\\n        // Perform transfer\\n        transferAsset(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x39c1bd81d8ec2a0fa7c23aad683017f5e2ec28a2db43643020649f935b5b74bf\",\"license\":\"UNLICENSED\"},\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/CMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCDeposit.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibERC20.sol\\\";\\n\\n/// @title CMCDeposit\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic supporting channel multisig deposits. Channel\\n///         funding is asymmetric, with `alice` having to call a deposit\\n///         function which tracks the total amount she has deposited so far,\\n///         and any other funds in the multisig being attributed to `bob`.\\n\\ncontract CMCDeposit is CMCCore, CMCAsset, ICMCDeposit {\\n    mapping(address => uint256) private depositsAlice;\\n\\n    receive() external payable onlyViaProxy nonReentrant {}\\n\\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsAlice(assetId);\\n    }\\n\\n    function _getTotalDepositsAlice(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return depositsAlice[assetId];\\n    }\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsBob(assetId);\\n    }\\n\\n    // Calculated using invariant onchain properties. Note we DONT use safemath here\\n    function _getTotalDepositsBob(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return\\n            LibAsset.getOwnBalance(assetId) +\\n            totalTransferred[assetId] -\\n            depositsAlice[assetId];\\n    }\\n\\n    function depositAlice(address assetId, uint256 amount)\\n        external\\n        payable\\n        override\\n        onlyViaProxy\\n        nonReentrant\\n    {\\n        if (LibAsset.isEther(assetId)) {\\n            require(msg.value == amount, \\\"CMCDeposit: VALUE_MISMATCH\\\");\\n        } else {\\n            // If ETH is sent along, it will be attributed to bob\\n            require(msg.value == 0, \\\"CMCDeposit: ETH_WITH_ERC_TRANSFER\\\");\\n            require(\\n                LibERC20.transferFrom(\\n                    assetId,\\n                    msg.sender,\\n                    address(this),\\n                    amount\\n                ),\\n                \\\"CMCDeposit: ERC20_TRANSFER_FAILED\\\"\\n            );\\n        }\\n        // NOTE: explicitly do NOT use safemath here\\n        depositsAlice[assetId] += amount;\\n        emit AliceDeposited(assetId, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x4d3dd828158289df93d6b5a6419bc5e8d95888aba81e62cd913af1e4c540bece\",\"license\":\"UNLICENSED\"},\"src.sol/CMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/Commitment.sol\\\";\\nimport \\\"./interfaces/ICMCWithdraw.sol\\\";\\nimport \\\"./interfaces/WithdrawHelper.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibChannelCrypto.sol\\\";\\nimport \\\"./lib/LibUtils.sol\\\";\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic for all cooperative channel multisig withdrawals.\\n///         Cooperative withdrawal commitments must be signed by both channel\\n///         participants. As part of the channel withdrawals, an arbitrary\\n///         call can be made, which is extracted from the withdraw data.\\n\\ncontract CMCWithdraw is CMCCore, CMCAsset, ICMCWithdraw {\\n    using LibChannelCrypto for bytes32;\\n\\n    mapping(bytes32 => bool) private isExecuted;\\n\\n    modifier validateWithdrawData(WithdrawData calldata wd) {\\n        require(\\n            wd.channelAddress == address(this),\\n            \\\"CMCWithdraw: CHANNEL_MISMATCH\\\"\\n        );\\n        _;\\n    }\\n\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (bool)\\n    {\\n        return isExecuted[hashWithdrawData(wd)];\\n    }\\n\\n    /// @param wd The withdraw data consisting of\\n    /// semantic withdraw information, i.e. assetId, recipient, and amount;\\n    /// information to make an optional call in addition to the actual transfer,\\n    /// i.e. target address for the call and call payload;\\n    /// additional information, i.e. channel address and nonce.\\n    /// @param aliceSignature Signature of owner a\\n    /// @param bobSignature Signature of owner b\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external override onlyViaProxy nonReentrant validateWithdrawData(wd) {\\n        // Generate hash\\n        bytes32 wdHash = hashWithdrawData(wd);\\n\\n        // Verify Alice's and Bob's signature on the withdraw data\\n        verifySignaturesOnWithdrawDataHash(wdHash, aliceSignature, bobSignature);\\n\\n        // Replay protection\\n        require(!isExecuted[wdHash], \\\"CMCWithdraw: ALREADY_EXECUTED\\\");\\n        isExecuted[wdHash] = true;\\n\\n        // Determine actually transferable amount\\n        uint256 actualAmount = getAvailableAmount(wd.assetId, wd.amount);\\n\\n        // Revert if actualAmount is zero && callTo is 0\\n        require(\\n            actualAmount > 0 || wd.callTo != address(0),\\n            \\\"CMCWithdraw: NO_OP\\\"\\n        );\\n\\n        // Register and execute the transfer\\n        transferAsset(wd.assetId, wd.recipient, actualAmount);\\n\\n        // Do we have to make a call in addition to the actual transfer?\\n        if (wd.callTo != address(0)) {\\n            WithdrawHelper(wd.callTo).execute(wd, actualAmount);\\n        }\\n    }\\n\\n    function verifySignaturesOnWithdrawDataHash(\\n        bytes32 wdHash,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) internal view {\\n        bytes32 commitment =\\n            keccak256(abi.encode(CommitmentType.WithdrawData, wdHash));\\n        require(\\n            commitment.checkSignature(aliceSignature, alice),\\n            \\\"CMCWithdraw: INVALID_ALICE_SIG\\\"\\n        );\\n        require(\\n            commitment.checkSignature(bobSignature, bob),\\n            \\\"CMCWithdraw: INVALID_BOB_SIG\\\"\\n        );\\n    }\\n\\n    function hashWithdrawData(WithdrawData calldata wd)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(wd));\\n    }\\n}\\n\",\"keccak256\":\"0x7fde93a55cab8b4a9497471af1f8321a6d9463a93c3c6b11cf6d5ada26326beb\",\"license\":\"UNLICENSED\"},\"src.sol/ChannelMastercopy.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/IVectorChannel.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./CMCDeposit.sol\\\";\\nimport \\\"./CMCWithdraw.sol\\\";\\nimport \\\"./CMCAdjudicator.sol\\\";\\n\\n/// @title ChannelMastercopy\\n/// @author Connext <support@connext.network>\\n/// @notice Contains the logic used by all Vector multisigs. A proxy to this\\n///         contract is deployed per-channel using the ChannelFactory.sol.\\n///         Supports channel adjudication logic, deposit logic, and arbitrary\\n///         calls when a commitment is double-signed.\\ncontract ChannelMastercopy is\\n    CMCCore,\\n    CMCAsset,\\n    CMCDeposit,\\n    CMCWithdraw,\\n    CMCAdjudicator,\\n    IVectorChannel\\n{\\n\\n}\\n\",\"keccak256\":\"0x96d68c908eb39a0002b574c423306ef1b9991da56087cb8f5e2d8b908676b3c7\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Commitment.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nenum CommitmentType {ChannelState, WithdrawData}\\n\",\"keccak256\":\"0xabfb62d2dbe45e307fc08742f87d2ff5d6faa9ab065f0c2395dc4adcbe0a9c20\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/WithdrawHelper.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCWithdraw.sol\\\";\\n\\ninterface WithdrawHelper {\\n    function execute(WithdrawData calldata wd, uint256 actualAmount) external;\\n}\\n\",\"keccak256\":\"0x45bd70363bc7a45001589d55d8d068a3baa321c50382c0c73f1ffae45adfc4bb\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibChannelCrypto.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/cryptography/ECDSA.sol\\\";\\n\\t\\t\\n/// @author Connext <support@connext.network>\\t\\t\\n/// @notice This library contains helpers for recovering signatures from a\\t\\t\\n///         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t\\n///         messages to prevent misuse of private keys by injected providers,\\t\\t\\n///         and instead only sign messages with a Vector channel prefix.\\nlibrary LibChannelCrypto {\\n    function checkSignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toChannelSignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toChannelSignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x16Vector Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    function checkUtilitySignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toUtilitySignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toUtilitySignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x17Utility Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xb8aa3679b75f2a1a5785f614f5dff9a76a689c18caa56a8df1f4e3c3167d6ece\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              },
              {
                "astId": 2348,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "totalTransferred",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2354,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "exitableAmount",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 2732,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "depositsAlice",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2895,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "isExecuted",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_bytes32,t_bool)"
              },
              {
                "astId": 1503,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "channelDispute",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(ChannelDispute)3596_storage"
              },
              {
                "astId": 1507,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "defundNonces",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 1511,
                "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                "label": "transferDisputes",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_bytes32,t_struct(TransferDispute)3603_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_bool)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_bytes32,t_struct(TransferDispute)3603_storage)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute)",
                "numberOfBytes": "32",
                "value": "t_struct(TransferDispute)3603_storage"
              },
              "t_struct(ChannelDispute)3596_storage": {
                "encoding": "inplace",
                "label": "struct ICMCAdjudicator.ChannelDispute",
                "members": [
                  {
                    "astId": 3587,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "channelStateHash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3589,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "nonce",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3591,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "merkleRoot",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3593,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "consensusExpiry",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3595,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "defundExpiry",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "160"
              },
              "t_struct(TransferDispute)3603_storage": {
                "encoding": "inplace",
                "label": "struct ICMCAdjudicator.TransferDispute",
                "members": [
                  {
                    "astId": 3598,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "transferStateHash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3600,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "transferDisputeExpiry",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3602,
                    "contract": "src.sol/ChannelMastercopy.sol:ChannelMastercopy",
                    "label": "isDefunded",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_bool"
                  }
                ],
                "numberOfBytes": "96"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "Contains the logic used by all Vector multisigs. A proxy to this         contract is deployed per-channel using the ChannelFactory.sol.         Supports channel adjudication logic, deposit logic, and arbitrary         calls when a commitment is double-signed.",
            "version": 1
          }
        }
      },
      "src.sol/ReentrancyGuard.sol": {
        "ReentrancyGuard": {
          "abi": [
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "CMCWithdraw",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "6080604052348015600f57600080fd5b50608c8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063f83d08ba14602d575b600080fd5b60336047565b604051603e9190604d565b60405180910390f35b60005481565b9081526020019056fea2646970667358221220078ef58ffff1e57368fb634f752391ae82cf5bbcf847205b1224538ce9f70e8f64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x8C DUP1 PUSH2 0x1E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xF83D08BA EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x4D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SMOD DUP15 CREATE2 DUP16 SELFDESTRUCT CALL 0xE5 PUSH20 0x68FB634F752391AE82CF5BBCF847205B1224538C 0xE9 0xF7 0xE DUP16 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "244:470:17:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c8063f83d08ba14602d575b600080fd5b60336047565b604051603e9190604d565b60405180910390f35b60005481565b9081526020019056fea2646970667358221220078ef58ffff1e57368fb634f752391ae82cf5bbcf847205b1224538ce9f70e8f64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xF83D08BA EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x4D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SMOD DUP15 CREATE2 DUP16 SELFDESTRUCT CALL 0xE5 PUSH20 0x68FB634F752391AE82CF5BBCF847205B1224538C 0xE9 0xF7 0xE DUP16 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "244:470:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;356:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;125:222:-1:-;76:37;;;252:2;237:18;;223:124::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "28000",
                "executionCost": "81",
                "totalCost": "28081"
              },
              "external": {
                "lock()": "1006"
              },
              "internal": {
                "setup()": "infinite"
              }
            },
            "methodIdentifiers": {
              "lock()": "f83d08ba"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"CMCWithdraw\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/ReentrancyGuard.sol:ReentrancyGuard",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "A \"mutex\" reentrancy guard, heavily influenced by OpenZeppelin.",
            "version": 1
          }
        }
      },
      "src.sol/TransferRegistry.sol": {
        "TransferRegistry": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct RegisteredTransfer",
                  "name": "transfer",
                  "type": "tuple"
                }
              ],
              "name": "TransferAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct RegisteredTransfer",
                  "name": "transfer",
                  "type": "tuple"
                }
              ],
              "name": "TransferRemoved",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "definition",
                  "type": "tuple"
                }
              ],
              "name": "addTransferDefinition",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getTransferDefinitions",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                }
              ],
              "name": "removeTransferDefinition",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {
              "addTransferDefinition((string,address,string,string,bytes))": {
                "details": "Should add a transfer definition to the registry"
              },
              "getTransferDefinitions()": {
                "details": "Should return all transfer defintions in registry"
              },
              "owner()": {
                "details": "Returns the address of the current owner."
              },
              "removeTransferDefinition(string)": {
                "details": "Should remove a transfer definition from the registry"
              },
              "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
              },
              "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
              }
            },
            "title": "TransferRegistry",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115078061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806355304c3f14610067578063715018a61461007c5780638da5cb5b14610084578063961bf9b1146100a2578063c9ff4d25146100b5578063f2fde38b146100ca575b600080fd5b61007a610075366004611061565b6100dd565b005b61007a610179565b61008c6101f8565b604051610099919061127c565b60405180910390f35b61007a6100b0366004611026565b610207565b6100bd61028b565b6040516100999190611290565b61007a6100d836600461100b565b61029c565b6100e5610352565b6000546001600160a01b0390811691161461011b5760405162461bcd60e51b81526004016101129061137c565b60405180910390fd5b60006101276001610356565b905061013460018361035d565b7fcdbba5dd6bffbe47d5f74dbed3cf4a2174815c7186eaa49b32f97af4c47543bf6101606001836104af565b60405161016d919061146b565b60405180910390a15050565b610181610352565b6000546001600160a01b039081169116146101ae5760405162461bcd60e51b81526004016101129061137c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b61020f610352565b6000546001600160a01b0390811691161461023c5760405162461bcd60e51b81526004016101129061137c565b610244610e79565b61024f600183610783565b905061025c6001836107c1565b7fdc44d9d985df00268149ae57add485c612e57109279f8485035dbe2b2251222b8160405161016d919061146b565b606061029760016109df565b905090565b6102a4610352565b6000546001600160a01b039081169116146102d15760405162461bcd60e51b81526004016101129061137c565b6001600160a01b0381166102f75760405162461bcd60e51b8152600401610112906112f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001015490565b805161036881610d0e565b156103855760405162461bcd60e51b8152600401610112906113b1565b61038f8382610d29565b156103ac5760405162461bcd60e51b815260040161011290611336565b60408051808201825283815260018501546020820152905184906103d19084906111f0565b908152604051602091819003820190208251805180519293919284926103fb928492910190610eb1565b506020828101516001830180546001600160a01b0319166001600160a01b039092169190911790556040830151805161043a9260028501920190610eb1565b5060608201518051610456916003840191602090910190610eb1565b5060808201518051610472916004840191602090910190610eb1565b505050602091820151600590910155600180850180549182018155600090815282902083516104a993919092019190840190610eb1565b50505050565b6104b7610e79565b600183015482106104da5760405162461bcd60e51b8152600401610112906113e8565b826000018360010183815481106104ed57fe5b90600052602060002001604051610504919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a0820184815291939092849291849184018282801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156106495780601f1061061e57610100808354040283529160200191610649565b820191906000526020600020905b81548152906001019060200180831161062c57829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b50505050508152505090505b92915050565b61078b610e79565b6107958383610d29565b6107b15760405162461bcd60e51b815260040161011290611429565b60405183906105049084906111f0565b6107ca81610d0e565b156107e75760405162461bcd60e51b8152600401610112906113b1565b6107f18282610d29565b61080d5760405162461bcd60e51b815260040161011290611429565b6000826000018260405161082191906111f0565b90815260405190819003602001902060050154600184018054919250606091600019810190811061084e57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b505050505090508184600001826040516108f691906111f0565b9081526020016040518091039020600501819055508084600101838154811061091b57fe5b906000526020600020019080519060200190610938929190610eb1565b5060405184906109499085906111f0565b908152604051908190036020019020600081816109668282610f2f565b6001820180546001600160a01b0319169055610986600283016000610f2f565b610994600383016000610f2f565b6109a2600483016000610f2f565b505060058201600090555050836001018054806109bb57fe5b6001900381819060005260206000200160006109d79190610f2f565b905550505050565b6001810154606090818167ffffffffffffffff811180156109ff57600080fd5b50604051908082528060200260200182016040528015610a3957816020015b610a26610e79565b815260200190600190039081610a1e5790505b50905060005b82811015610d065784600001856001018281548110610a5a57fe5b90600052602060002001604051610a71919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a08201848152919390928492918491840182828015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610c4a5780601f10610c1f57610100808354040283529160200191610c4a565b820191906000526020600020905b815481529060010190602001808311610c2d57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081525050828281518110610cf357fe5b6020908102919091010152600101610a3f565b509392505050565b600061077d8260405180602001604052806000815250610e20565b6000610d3482610d0e565b158015610d445750600183015415155b8015610e195750610e19836001018460000184604051610d6491906111f0565b90815260200160405180910390206005015481548110610d8057fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b505050505083610e20565b9392505050565b600081604051602001610e3391906111f0565b6040516020818303038152906040528051906020012083604051602001610e5a91906111f0565b6040516020818303038152906040528051906020012014905092915050565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ef257805160ff1916838001178555610f1f565b82800160010185558215610f1f579182015b82811115610f1f578251825591602001919060010190610f04565b50610f2b929150610f76565b5090565b50805460018160011615610100020316600290046000825580601f10610f555750610f73565b601f016020900490600052602060002090810190610f739190610f76565b50565b5b80821115610f2b5760008155600101610f77565b80356001600160a01b038116811461077d57600080fd5b600082601f830112610fb2578081fd5b813567ffffffffffffffff811115610fc8578182fd5b610fdb601f8201601f191660200161147e565b9150808252836020828501011115610ff257600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561101c578081fd5b610e198383610f8b565b600060208284031215611037578081fd5b813567ffffffffffffffff81111561104d578182fd5b61105984828501610fa2565b949350505050565b600060208284031215611072578081fd5b813567ffffffffffffffff80821115611089578283fd5b9083019060a0828603121561109c578283fd5b6110a660a061147e565b8235828111156110b4578485fd5b6110c087828601610fa2565b8252506110d08660208501610f8b565b60208201526040830135828111156110e6578485fd5b6110f287828601610fa2565b604083015250606083013582811115611109578485fd5b61111587828601610fa2565b60608301525060808301358281111561112c578485fd5b61113887828601610fa2565b60808301525095945050505050565b6000815180845261115f8160208601602086016114a5565b601f01601f19169290920160200192915050565b6000815160a0845261118860a0850182611147565b905060018060a01b036020840151166020850152604083015184820360408601526111b38282611147565b915050606083015184820360608601526111cd8282611147565b915050608083015184820360808601526111e78282611147565b95945050505050565b600082516112028184602087016114a5565b9190910192915050565b600080835460018082166000811461122b576001811461124257611271565b60ff198316865260028304607f1686019350611271565b600283048786526020808720875b838110156112695781548a820152908501908201611250565b505050860193505b509195945050505050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156112e357603f198886030184526112d1858351611173565b945092850192908501906001016112b5565b5092979650505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f4c69624974657261626c654d617070696e673a204e414d455f414c524541445960408201526517d05111115160d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f4c69624974657261626c654d617070696e673a20454d5054595f4e414d450000604082015260600190565b60208082526021908201527f4c69624974657261626c654d617070696e673a20494e56414c49445f494e44456040820152600b60fb1b606082015260800190565b60208082526022908201527f4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f55604082015261139160f21b606082015260800190565b600060208252610e196020830184611173565b60405181810167ffffffffffffffff8111828210171561149d57600080fd5b604052919050565b60005b838110156114c05781810151838201526020016114a8565b838111156104a9575050600091015256fea26469706673582212207ffce686b133899c962d2392c37d7cc417bfb49017cb433d19d525b065f0f46d64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x1B PUSH2 0x6A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x6E JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x1507 DUP1 PUSH2 0x7D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x55304C3F EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0x961BF9B1 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC9FF4D25 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xCA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x1061 JUMP JUMPDEST PUSH2 0xDD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7A PUSH2 0x179 JUMP JUMPDEST PUSH2 0x8C PUSH2 0x1F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x99 SWAP2 SWAP1 PUSH2 0x127C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7A PUSH2 0xB0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1026 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST PUSH2 0xBD PUSH2 0x28B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x99 SWAP2 SWAP1 PUSH2 0x1290 JUMP JUMPDEST PUSH2 0x7A PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x100B JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST PUSH2 0xE5 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x11B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x127 PUSH1 0x1 PUSH2 0x356 JUMP JUMPDEST SWAP1 POP PUSH2 0x134 PUSH1 0x1 DUP4 PUSH2 0x35D JUMP JUMPDEST PUSH32 0xCDBBA5DD6BFFBE47D5F74DBED3CF4A2174815C7186EAA49B32F97AF4C47543BF PUSH2 0x160 PUSH1 0x1 DUP4 PUSH2 0x4AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16D SWAP2 SWAP1 PUSH2 0x146B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x181 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x20F PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x23C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH2 0x244 PUSH2 0xE79 JUMP JUMPDEST PUSH2 0x24F PUSH1 0x1 DUP4 PUSH2 0x783 JUMP JUMPDEST SWAP1 POP PUSH2 0x25C PUSH1 0x1 DUP4 PUSH2 0x7C1 JUMP JUMPDEST PUSH32 0xDC44D9D985DF00268149AE57ADD485C612E57109279F8485035DBE2B2251222B DUP2 PUSH1 0x40 MLOAD PUSH2 0x16D SWAP2 SWAP1 PUSH2 0x146B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x297 PUSH1 0x1 PUSH2 0x9DF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2A4 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x2D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2F7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x12F0 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x368 DUP2 PUSH2 0xD0E JUMP JUMPDEST ISZERO PUSH2 0x385 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x13B1 JUMP JUMPDEST PUSH2 0x38F DUP4 DUP3 PUSH2 0xD29 JUMP JUMPDEST ISZERO PUSH2 0x3AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x1336 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x1 DUP6 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP1 PUSH2 0x3D1 SWAP1 DUP5 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 SWAP2 DUP2 SWAP1 SUB DUP3 ADD SWAP1 KECCAK256 DUP3 MLOAD DUP1 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH2 0x3FB SWAP3 DUP5 SWAP3 SWAP2 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x1 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x43A SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x456 SWAP2 PUSH1 0x3 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x472 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP POP POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE PUSH1 0x1 DUP1 DUP6 ADD DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x4A9 SWAP4 SWAP2 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP5 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4B7 PUSH2 0xE79 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP3 LT PUSH2 0x4DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x13E8 JUMP JUMPDEST DUP3 PUSH1 0x0 ADD DUP4 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x4ED JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0x504 SWAP2 SWAP1 PUSH2 0x120C JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x59F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x574 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x59F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x582 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x649 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x61E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x649 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x62C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6DD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6B2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6DD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6C0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x771 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x746 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x771 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x754 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x78B PUSH2 0xE79 JUMP JUMPDEST PUSH2 0x795 DUP4 DUP4 PUSH2 0xD29 JUMP JUMPDEST PUSH2 0x7B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x1429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH2 0x504 SWAP1 DUP5 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH2 0x7CA DUP2 PUSH2 0xD0E JUMP JUMPDEST ISZERO PUSH2 0x7E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x13B1 JUMP JUMPDEST PUSH2 0x7F1 DUP3 DUP3 PUSH2 0xD29 JUMP JUMPDEST PUSH2 0x80D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x1429 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x821 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0x1 DUP5 ADD DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x84E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x8DC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8B1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8DC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x8BF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP2 DUP5 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x8F6 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x91B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x938 SWAP3 SWAP2 SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP5 SWAP1 PUSH2 0x949 SWAP1 DUP6 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x0 DUP2 DUP2 PUSH2 0x966 DUP3 DUP3 PUSH2 0xF2F JUMP JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x986 PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0xF2F JUMP JUMPDEST PUSH2 0x994 PUSH1 0x3 DUP4 ADD PUSH1 0x0 PUSH2 0xF2F JUMP JUMPDEST PUSH2 0x9A2 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0xF2F JUMP JUMPDEST POP POP PUSH1 0x5 DUP3 ADD PUSH1 0x0 SWAP1 SSTORE POP POP DUP4 PUSH1 0x1 ADD DUP1 SLOAD DUP1 PUSH2 0x9BB JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x9D7 SWAP2 SWAP1 PUSH2 0xF2F JUMP JUMPDEST SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x9FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA39 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xA26 PUSH2 0xE79 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xA1E JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xD06 JUMPI DUP5 PUSH1 0x0 ADD DUP6 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xA5A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0xA71 SWAP2 SWAP1 PUSH2 0x120C JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xB0C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xAE1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB0C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xAEF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xBB6 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB8B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBB6 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB99 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC4A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC1F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC4A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC2D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCDE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCDE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xCF3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xA3F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0xE20 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD34 DUP3 PUSH2 0xD0E JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0xD44 JUMPI POP PUSH1 0x1 DUP4 ADD SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0xE19 JUMPI POP PUSH2 0xE19 DUP4 PUSH1 0x1 ADD DUP5 PUSH1 0x0 ADD DUP5 PUSH1 0x40 MLOAD PUSH2 0xD64 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD DUP2 SLOAD DUP2 LT PUSH2 0xD80 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xE0E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xDE3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xE0E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDF1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP4 PUSH2 0xE20 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE33 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xEF2 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xF1F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xF1F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xF1F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF04 JUMP JUMPDEST POP PUSH2 0xF2B SWAP3 SWAP2 POP PUSH2 0xF76 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0xF55 JUMPI POP PUSH2 0xF73 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0xF76 JUMP JUMPDEST POP JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF2B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xF77 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x77D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xFB2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFC8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xFDB PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x147E JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xFF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x101C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xE19 DUP4 DUP4 PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1037 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x104D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1059 DUP5 DUP3 DUP6 ADD PUSH2 0xFA2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1072 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1089 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xA0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x109C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x10A6 PUSH1 0xA0 PUSH2 0x147E JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x10B4 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x10C0 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0x10D0 DUP7 PUSH1 0x20 DUP6 ADD PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x10E6 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x10F2 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1109 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1115 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x112C JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1138 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x115F DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x14A5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0xA0 DUP5 MSTORE PUSH2 0x1188 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x11B3 DUP3 DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x60 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x11CD DUP3 DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x80 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x11E7 DUP3 DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1202 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x14A5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 AND PUSH1 0x0 DUP2 EQ PUSH2 0x122B JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x1242 JUMPI PUSH2 0x1271 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE PUSH1 0x2 DUP4 DIV PUSH1 0x7F AND DUP7 ADD SWAP4 POP PUSH2 0x1271 JUMP JUMPDEST PUSH1 0x2 DUP4 DIV DUP8 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 KECCAK256 DUP8 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1269 JUMPI DUP2 SLOAD DUP11 DUP3 ADD MSTORE SWAP1 DUP6 ADD SWAP1 DUP3 ADD PUSH2 0x1250 JUMP JUMPDEST POP POP POP DUP7 ADD SWAP4 POP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x12E3 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x12D1 DUP6 DUP4 MLOAD PUSH2 0x1173 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x12B5 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x17D051111151 PUSH1 0xD2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20454D5054595F4E414D450000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20494E56414C49445F494E4445 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0xFB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F4E4F545F464F55 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1391 PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xE19 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1173 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x149D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14A8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4A9 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH32 0xFCE686B133899C962D2392C37D7CC417BFB49017CB433D19D525B065F0F46D64 PUSH20 0x6F6C634300070100330000000000000000000000 ",
              "sourceMap": "713:1397:18:-:0;;;;;;;;;;;;-1:-1:-1;856:17:1;876:12;:10;:12::i;:::-;898:6;:18;;-1:-1:-1;;;;;;898:18:1;-1:-1:-1;;;;;898:18:1;;;;;;;931:43;;898:18;;-1:-1:-1;898:18:1;931:43;;898:6;;931:43;831:150;713:1397:18;;590:104:0;677:10;590:104;:::o;713:1397:18:-;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c806355304c3f14610067578063715018a61461007c5780638da5cb5b14610084578063961bf9b1146100a2578063c9ff4d25146100b5578063f2fde38b146100ca575b600080fd5b61007a610075366004611061565b6100dd565b005b61007a610179565b61008c6101f8565b604051610099919061127c565b60405180910390f35b61007a6100b0366004611026565b610207565b6100bd61028b565b6040516100999190611290565b61007a6100d836600461100b565b61029c565b6100e5610352565b6000546001600160a01b0390811691161461011b5760405162461bcd60e51b81526004016101129061137c565b60405180910390fd5b60006101276001610356565b905061013460018361035d565b7fcdbba5dd6bffbe47d5f74dbed3cf4a2174815c7186eaa49b32f97af4c47543bf6101606001836104af565b60405161016d919061146b565b60405180910390a15050565b610181610352565b6000546001600160a01b039081169116146101ae5760405162461bcd60e51b81526004016101129061137c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b61020f610352565b6000546001600160a01b0390811691161461023c5760405162461bcd60e51b81526004016101129061137c565b610244610e79565b61024f600183610783565b905061025c6001836107c1565b7fdc44d9d985df00268149ae57add485c612e57109279f8485035dbe2b2251222b8160405161016d919061146b565b606061029760016109df565b905090565b6102a4610352565b6000546001600160a01b039081169116146102d15760405162461bcd60e51b81526004016101129061137c565b6001600160a01b0381166102f75760405162461bcd60e51b8152600401610112906112f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001015490565b805161036881610d0e565b156103855760405162461bcd60e51b8152600401610112906113b1565b61038f8382610d29565b156103ac5760405162461bcd60e51b815260040161011290611336565b60408051808201825283815260018501546020820152905184906103d19084906111f0565b908152604051602091819003820190208251805180519293919284926103fb928492910190610eb1565b506020828101516001830180546001600160a01b0319166001600160a01b039092169190911790556040830151805161043a9260028501920190610eb1565b5060608201518051610456916003840191602090910190610eb1565b5060808201518051610472916004840191602090910190610eb1565b505050602091820151600590910155600180850180549182018155600090815282902083516104a993919092019190840190610eb1565b50505050565b6104b7610e79565b600183015482106104da5760405162461bcd60e51b8152600401610112906113e8565b826000018360010183815481106104ed57fe5b90600052602060002001604051610504919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a0820184815291939092849291849184018282801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156106495780601f1061061e57610100808354040283529160200191610649565b820191906000526020600020905b81548152906001019060200180831161062c57829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b50505050508152505090505b92915050565b61078b610e79565b6107958383610d29565b6107b15760405162461bcd60e51b815260040161011290611429565b60405183906105049084906111f0565b6107ca81610d0e565b156107e75760405162461bcd60e51b8152600401610112906113b1565b6107f18282610d29565b61080d5760405162461bcd60e51b815260040161011290611429565b6000826000018260405161082191906111f0565b90815260405190819003602001902060050154600184018054919250606091600019810190811061084e57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b505050505090508184600001826040516108f691906111f0565b9081526020016040518091039020600501819055508084600101838154811061091b57fe5b906000526020600020019080519060200190610938929190610eb1565b5060405184906109499085906111f0565b908152604051908190036020019020600081816109668282610f2f565b6001820180546001600160a01b0319169055610986600283016000610f2f565b610994600383016000610f2f565b6109a2600483016000610f2f565b505060058201600090555050836001018054806109bb57fe5b6001900381819060005260206000200160006109d79190610f2f565b905550505050565b6001810154606090818167ffffffffffffffff811180156109ff57600080fd5b50604051908082528060200260200182016040528015610a3957816020015b610a26610e79565b815260200190600190039081610a1e5790505b50905060005b82811015610d065784600001856001018281548110610a5a57fe5b90600052602060002001604051610a71919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a08201848152919390928492918491840182828015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610c4a5780601f10610c1f57610100808354040283529160200191610c4a565b820191906000526020600020905b815481529060010190602001808311610c2d57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081525050828281518110610cf357fe5b6020908102919091010152600101610a3f565b509392505050565b600061077d8260405180602001604052806000815250610e20565b6000610d3482610d0e565b158015610d445750600183015415155b8015610e195750610e19836001018460000184604051610d6491906111f0565b90815260200160405180910390206005015481548110610d8057fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b505050505083610e20565b9392505050565b600081604051602001610e3391906111f0565b6040516020818303038152906040528051906020012083604051602001610e5a91906111f0565b6040516020818303038152906040528051906020012014905092915050565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ef257805160ff1916838001178555610f1f565b82800160010185558215610f1f579182015b82811115610f1f578251825591602001919060010190610f04565b50610f2b929150610f76565b5090565b50805460018160011615610100020316600290046000825580601f10610f555750610f73565b601f016020900490600052602060002090810190610f739190610f76565b50565b5b80821115610f2b5760008155600101610f77565b80356001600160a01b038116811461077d57600080fd5b600082601f830112610fb2578081fd5b813567ffffffffffffffff811115610fc8578182fd5b610fdb601f8201601f191660200161147e565b9150808252836020828501011115610ff257600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561101c578081fd5b610e198383610f8b565b600060208284031215611037578081fd5b813567ffffffffffffffff81111561104d578182fd5b61105984828501610fa2565b949350505050565b600060208284031215611072578081fd5b813567ffffffffffffffff80821115611089578283fd5b9083019060a0828603121561109c578283fd5b6110a660a061147e565b8235828111156110b4578485fd5b6110c087828601610fa2565b8252506110d08660208501610f8b565b60208201526040830135828111156110e6578485fd5b6110f287828601610fa2565b604083015250606083013582811115611109578485fd5b61111587828601610fa2565b60608301525060808301358281111561112c578485fd5b61113887828601610fa2565b60808301525095945050505050565b6000815180845261115f8160208601602086016114a5565b601f01601f19169290920160200192915050565b6000815160a0845261118860a0850182611147565b905060018060a01b036020840151166020850152604083015184820360408601526111b38282611147565b915050606083015184820360608601526111cd8282611147565b915050608083015184820360808601526111e78282611147565b95945050505050565b600082516112028184602087016114a5565b9190910192915050565b600080835460018082166000811461122b576001811461124257611271565b60ff198316865260028304607f1686019350611271565b600283048786526020808720875b838110156112695781548a820152908501908201611250565b505050860193505b509195945050505050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156112e357603f198886030184526112d1858351611173565b945092850192908501906001016112b5565b5092979650505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f4c69624974657261626c654d617070696e673a204e414d455f414c524541445960408201526517d05111115160d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f4c69624974657261626c654d617070696e673a20454d5054595f4e414d450000604082015260600190565b60208082526021908201527f4c69624974657261626c654d617070696e673a20494e56414c49445f494e44456040820152600b60fb1b606082015260800190565b60208082526022908201527f4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f55604082015261139160f21b606082015260800190565b600060208252610e196020830184611173565b60405181810167ffffffffffffffff8111828210171561149d57600080fd5b604052919050565b60005b838110156114c05781810151838201526020016114a8565b838111156104a9575050600091015256fea26469706673582212207ffce686b133899c962d2392c37d7cc417bfb49017cb433d19d525b065f0f46d64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x55304C3F EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0x961BF9B1 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC9FF4D25 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xCA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x1061 JUMP JUMPDEST PUSH2 0xDD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7A PUSH2 0x179 JUMP JUMPDEST PUSH2 0x8C PUSH2 0x1F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x99 SWAP2 SWAP1 PUSH2 0x127C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7A PUSH2 0xB0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1026 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST PUSH2 0xBD PUSH2 0x28B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x99 SWAP2 SWAP1 PUSH2 0x1290 JUMP JUMPDEST PUSH2 0x7A PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x100B JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST PUSH2 0xE5 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x11B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x127 PUSH1 0x1 PUSH2 0x356 JUMP JUMPDEST SWAP1 POP PUSH2 0x134 PUSH1 0x1 DUP4 PUSH2 0x35D JUMP JUMPDEST PUSH32 0xCDBBA5DD6BFFBE47D5F74DBED3CF4A2174815C7186EAA49B32F97AF4C47543BF PUSH2 0x160 PUSH1 0x1 DUP4 PUSH2 0x4AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16D SWAP2 SWAP1 PUSH2 0x146B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x181 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x1AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x20F PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x23C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH2 0x244 PUSH2 0xE79 JUMP JUMPDEST PUSH2 0x24F PUSH1 0x1 DUP4 PUSH2 0x783 JUMP JUMPDEST SWAP1 POP PUSH2 0x25C PUSH1 0x1 DUP4 PUSH2 0x7C1 JUMP JUMPDEST PUSH32 0xDC44D9D985DF00268149AE57ADD485C612E57109279F8485035DBE2B2251222B DUP2 PUSH1 0x40 MLOAD PUSH2 0x16D SWAP2 SWAP1 PUSH2 0x146B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x297 PUSH1 0x1 PUSH2 0x9DF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2A4 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x2D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x137C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2F7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x12F0 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x368 DUP2 PUSH2 0xD0E JUMP JUMPDEST ISZERO PUSH2 0x385 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x13B1 JUMP JUMPDEST PUSH2 0x38F DUP4 DUP3 PUSH2 0xD29 JUMP JUMPDEST ISZERO PUSH2 0x3AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x1336 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x1 DUP6 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP1 PUSH2 0x3D1 SWAP1 DUP5 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 SWAP2 DUP2 SWAP1 SUB DUP3 ADD SWAP1 KECCAK256 DUP3 MLOAD DUP1 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH2 0x3FB SWAP3 DUP5 SWAP3 SWAP2 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x1 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x43A SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x456 SWAP2 PUSH1 0x3 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x472 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP POP POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE PUSH1 0x1 DUP1 DUP6 ADD DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x4A9 SWAP4 SWAP2 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP5 ADD SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4B7 PUSH2 0xE79 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP3 LT PUSH2 0x4DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x13E8 JUMP JUMPDEST DUP3 PUSH1 0x0 ADD DUP4 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x4ED JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0x504 SWAP2 SWAP1 PUSH2 0x120C JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x59F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x574 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x59F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x582 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x649 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x61E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x649 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x62C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6DD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6B2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6DD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6C0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x771 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x746 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x771 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x754 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x78B PUSH2 0xE79 JUMP JUMPDEST PUSH2 0x795 DUP4 DUP4 PUSH2 0xD29 JUMP JUMPDEST PUSH2 0x7B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x1429 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH2 0x504 SWAP1 DUP5 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH2 0x7CA DUP2 PUSH2 0xD0E JUMP JUMPDEST ISZERO PUSH2 0x7E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x13B1 JUMP JUMPDEST PUSH2 0x7F1 DUP3 DUP3 PUSH2 0xD29 JUMP JUMPDEST PUSH2 0x80D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x112 SWAP1 PUSH2 0x1429 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x821 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0x1 DUP5 ADD DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x84E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x8DC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8B1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8DC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x8BF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP2 DUP5 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x8F6 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x91B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x938 SWAP3 SWAP2 SWAP1 PUSH2 0xEB1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP5 SWAP1 PUSH2 0x949 SWAP1 DUP6 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x0 DUP2 DUP2 PUSH2 0x966 DUP3 DUP3 PUSH2 0xF2F JUMP JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x986 PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0xF2F JUMP JUMPDEST PUSH2 0x994 PUSH1 0x3 DUP4 ADD PUSH1 0x0 PUSH2 0xF2F JUMP JUMPDEST PUSH2 0x9A2 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0xF2F JUMP JUMPDEST POP POP PUSH1 0x5 DUP3 ADD PUSH1 0x0 SWAP1 SSTORE POP POP DUP4 PUSH1 0x1 ADD DUP1 SLOAD DUP1 PUSH2 0x9BB JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x9D7 SWAP2 SWAP1 PUSH2 0xF2F JUMP JUMPDEST SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x9FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA39 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xA26 PUSH2 0xE79 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xA1E JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xD06 JUMPI DUP5 PUSH1 0x0 ADD DUP6 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xA5A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0xA71 SWAP2 SWAP1 PUSH2 0x120C JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xB0C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xAE1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB0C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xAEF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xBB6 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB8B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBB6 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB99 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC4A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC1F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC4A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC2D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCDE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCDE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xCF3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xA3F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0xE20 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD34 DUP3 PUSH2 0xD0E JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0xD44 JUMPI POP PUSH1 0x1 DUP4 ADD SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0xE19 JUMPI POP PUSH2 0xE19 DUP4 PUSH1 0x1 ADD DUP5 PUSH1 0x0 ADD DUP5 PUSH1 0x40 MLOAD PUSH2 0xD64 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD DUP2 SLOAD DUP2 LT PUSH2 0xD80 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xE0E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xDE3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xE0E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDF1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP4 PUSH2 0xE20 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE33 SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xEF2 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xF1F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xF1F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xF1F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF04 JUMP JUMPDEST POP PUSH2 0xF2B SWAP3 SWAP2 POP PUSH2 0xF76 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0xF55 JUMPI POP PUSH2 0xF73 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0xF76 JUMP JUMPDEST POP JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF2B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xF77 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x77D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xFB2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFC8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xFDB PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x147E JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xFF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x101C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xE19 DUP4 DUP4 PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1037 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x104D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1059 DUP5 DUP3 DUP6 ADD PUSH2 0xFA2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1072 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1089 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xA0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x109C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x10A6 PUSH1 0xA0 PUSH2 0x147E JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x10B4 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x10C0 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0x10D0 DUP7 PUSH1 0x20 DUP6 ADD PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x10E6 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x10F2 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1109 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1115 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x112C JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1138 DUP8 DUP3 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x115F DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x14A5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0xA0 DUP5 MSTORE PUSH2 0x1188 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x11B3 DUP3 DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x60 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x11CD DUP3 DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x80 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x11E7 DUP3 DUP3 PUSH2 0x1147 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1202 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x14A5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 AND PUSH1 0x0 DUP2 EQ PUSH2 0x122B JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x1242 JUMPI PUSH2 0x1271 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE PUSH1 0x2 DUP4 DIV PUSH1 0x7F AND DUP7 ADD SWAP4 POP PUSH2 0x1271 JUMP JUMPDEST PUSH1 0x2 DUP4 DIV DUP8 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 KECCAK256 DUP8 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1269 JUMPI DUP2 SLOAD DUP11 DUP3 ADD MSTORE SWAP1 DUP6 ADD SWAP1 DUP3 ADD PUSH2 0x1250 JUMP JUMPDEST POP POP POP DUP7 ADD SWAP4 POP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x12E3 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x12D1 DUP6 DUP4 MLOAD PUSH2 0x1173 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x12B5 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x17D051111151 PUSH1 0xD2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20454D5054595F4E414D450000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20494E56414C49445F494E4445 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0xFB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F4E4F545F464F55 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1391 PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xE19 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1173 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x149D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14A8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4A9 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH32 0xFCE686B133899C962D2392C37D7CC417BFB49017CB433D19D525B065F0F46D64 PUSH20 0x6F6C634300070100330000000000000000000000 ",
              "sourceMap": "713:1397:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;958:414;;;;;;:::i;:::-;;:::i;:::-;;1680:145:1;;;:::i;1057:77::-;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1445:405:18;;;;;;:::i;:::-;;:::i;1919:189::-;;;:::i;:::-;;;;;;;:::i;1974:240:1:-;;;;;;:::i;:::-;;:::i;958:414:18:-;1271:12:1;:10;:12::i;:::-;1261:6;;-1:-1:-1;;;;;1261:6:1;;;:22;;;1253:67;;;;-1:-1:-1;;;1253:67:1;;;;;;;:::i;:::-;;;;;;;;;1140:11:18::1;1154:18;:9;:16;:18::i;:::-;1140:32:::0;-1:-1:-1;1226:43:18::1;:9;1258:10:::0;1226:31:::1;:43::i;:::-;1307:58;1321:43;:9;1360:3:::0;1321:38:::1;:43::i;:::-;1307:58;;;;;;:::i;:::-;;;;;;;;1330:1:1;958:414:18::0;:::o;1680:145:1:-;1271:12;:10;:12::i;:::-;1261:6;;-1:-1:-1;;;;;1261:6:1;;;:22;;;1253:67;;;;-1:-1:-1;;;1253:67:1;;;;;;;:::i;:::-;1786:1:::1;1770:6:::0;;1749:40:::1;::::0;-1:-1:-1;;;;;1770:6:1;;::::1;::::0;1749:40:::1;::::0;1786:1;;1749:40:::1;1816:1;1799:19:::0;;-1:-1:-1;;;;;;1799:19:1::1;::::0;;1680:145::o;1057:77::-;1095:7;1121:6;-1:-1:-1;;;;;1121:6:1;1057:77;:::o;1445:405:18:-;1271:12:1;:10;:12::i;:::-;1261:6;;-1:-1:-1;;;;;1261:6:1;;;:22;;;1253:67;;;;-1:-1:-1;;;1253:67:1;;;;;;;:::i;:::-;1622:34:18::1;;:::i;:::-;1659:43;:9;1697:4:::0;1659:37:::1;:43::i;:::-;1622:80:::0;-1:-1:-1;1740:40:18::1;:9;1775:4:::0;1740:34:::1;:40::i;:::-;1818:25;1834:8;1818:25;;;;;;:::i;1919:189::-:0;2017:27;2067:34;:9;:32;:34::i;:::-;2060:41;;1919:189;:::o;1974:240:1:-;1271:12;:10;:12::i;:::-;1261:6;;-1:-1:-1;;;;;1261:6:1;;;:22;;;1253:67;;;;-1:-1:-1;;;1253:67:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;2062:22:1;::::1;2054:73;;;;-1:-1:-1::0;;;2054:73:1::1;;;;;;;:::i;:::-;2163:6;::::0;;2142:38:::1;::::0;-1:-1:-1;;;;;2142:38:1;;::::1;::::0;2163:6;::::1;::::0;2142:38:::1;::::0;::::1;2190:6;:17:::0;;-1:-1:-1;;;;;;2190:17:1::1;-1:-1:-1::0;;;;;2190:17:1;;;::::1;::::0;;;::::1;::::0;;1974:240::o;590:104:0:-;677:10;590:104;:::o;1308:147:35:-;1431:10;;:17;;1308:147::o;2482:509::-;2641:13;;2673:19;2641:13;2673;:19::i;:::-;2672:20;2664:63;;;;-1:-1:-1;;;2664:63:35;;;;;;;:::i;:::-;2746:22;2757:4;2763;2746:10;:22::i;:::-;2745:23;2737:74;;;;-1:-1:-1;;;2737:74:35;;;;;;;:::i;:::-;2844:109;;;;;;;;;;;2925:10;;;:17;2844:109;;;;2821:20;;2925:4;;2821:20;;2836:4;;2821:20;:::i;:::-;;;;;;;;;;;;;;;:132;;;;;;:20;;:132;;:20;;:132;;:20;;:132;;;;:::i;:::-;-1:-1:-1;2821:132:35;;;;;;;;;;-1:-1:-1;;;;;;2821:132:35;-1:-1:-1;;;;;2821:132:35;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2821:132:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2821:132:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2821:132:35;;;;;;;;;;2963:10;;;;:21;;;;;;;-1:-1:-1;2963:21:35;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2482:509;;;:::o;1758:302::-;1886:25;;:::i;:::-;1939:10;;;:17;1931:25;;1923:71;;;;-1:-1:-1;;;1923:71:35;;;;;;;:::i;:::-;2011:4;:14;;2026:4;:10;;2037:5;2026:17;;;;;;;;;;;;;;;2011:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2004:49;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2011:33;;;;;;2004:49;2011:33;;2004:49;;2011:33;2004:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2004:49:35;;;-1:-1:-1;;2004:49:35;;;;;-1:-1:-1;;;;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2004:49:35;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2004:49:35;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1758:302;;;;;:::o;1461:291::-;1593:25;;:::i;:::-;1638:22;1649:4;1655;1638:10;:22::i;:::-;1630:69;;;;-1:-1:-1;;;1630:69:35;;;;;;;:::i;:::-;1716:20;;:4;;:20;;1731:4;;1716:20;:::i;2997:543::-;3131:19;3145:4;3131:13;:19::i;:::-;3130:20;3122:63;;;;-1:-1:-1;;;3122:63:35;;;;;;;:::i;:::-;3203:22;3214:4;3220;3203:10;:22::i;:::-;3195:69;;;;-1:-1:-1;;;3195:69:35;;;;;;;:::i;:::-;3274:13;3290:4;:14;;3305:4;3290:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;3351:10;;;3362:17;;3290:26;;-1:-1:-1;3326:22:35;;-1:-1:-1;;3362:21:35;;;3351:33;;;;;;;;;;;;;;;;3326:58;;;;;;;-1:-1:-1;;3326:58:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3351:33;3326:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3427:5;3394:4;:14;;3409:8;3394:24;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;:38;;;;3462:8;3442:4;:10;;3453:5;3442:17;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3487:20:35;;:4;;:20;;3502:4;;3487:20;:::i;:::-;;;;;;;;;;;;;;;;;3480:27;3487:20;;3480:27;:::i;:::-;;;;;;-1:-1:-1;;;;;;3480:27:35;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;3517:4;:10;;:16;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2997:543;;;;:::o;2066:410::-;2230:10;;;:17;2175:27;;;2230:17;2297:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2257:67;;2339:9;2334:110;2358:1;2354;:5;2334:110;;;2395:4;:14;;2410:4;:10;;2421:1;2410:13;;;;;;;;;;;;;;;2395:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2380:53;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2395:29;;;;;;2380:53;2395:29;;2380:53;;2395:29;2380:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2380:53:35;;;-1:-1:-1;;2380:53:35;;;;;-1:-1:-1;;;;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2380:53:35;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2380:53:35;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;2390:1;2380:12;;;;;;;;;;;;;;;;;:53;2361:3;;2334:110;;;-1:-1:-1;2460:9:35;2066:410;-1:-1:-1;;;2066:410:35:o;891:111::-;954:4;977:18;989:1;977:18;;;;;;;;;;;;:11;:18::i;1008:294::-;1125:4;1165:19;1179:4;1165:13;:19::i;:::-;1164:20;:58;;;;-1:-1:-1;1200:10:35;;;:17;:22;;1164:58;:131;;;;;1238:57;1250:4;:10;;1261:4;:14;;1276:4;1261:20;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;1250:38;;;;;;;;;;;;;;;;;;1238:57;;;;;;;-1:-1:-1;;1238:57:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1250:38;1238:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1290:4;1238:11;:57::i;:::-;1145:150;1008:294;-1:-1:-1;;;1008:294:35:o;685:200::-;787:4;875:1;858:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;848:30;;;;;;841:1;824:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;814:30;;;;;;:64;807:71;;685:200;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;5:130;72:20;;-1:-1;;;;;19247:54;;19908:35;;19898:2;;19957:1;;19947:12;143:440;;244:3;237:4;229:6;225:17;221:27;211:2;;-1:-1;;252:12;211:2;299:6;286:20;16754:18;16746:6;16743:30;16740:2;;;-1:-1;;16776:12;16740:2;321:64;16849:9;16830:17;;-1:-1;;16826:33;16917:4;16907:15;321:64;:::i;:::-;312:73;;405:6;398:5;391:21;509:3;16917:4;500:6;433;491:16;;488:25;485:2;;;526:1;;516:12;485:2;19395:6;16917:4;433:6;429:17;16917:4;467:5;463:16;19372:30;19451:1;19433:16;;;16917:4;19433:16;19426:27;467:5;204:379;-1:-1;;204:379::o;2411:241::-;;2515:2;2503:9;2494:7;2490:23;2486:32;2483:2;;;-1:-1;;2521:12;2483:2;2583:53;2628:7;2604:22;2583:53;:::i;2659:347::-;;2773:2;2761:9;2752:7;2748:23;2744:32;2741:2;;;-1:-1;;2779:12;2741:2;2837:17;2824:31;2875:18;2867:6;2864:30;2861:2;;;-1:-1;;2897:12;2861:2;2927:63;2982:7;2973:6;2962:9;2958:22;2927:63;:::i;:::-;2917:73;2735:271;-1:-1;;;;2735:271::o;3013:399::-;;3153:2;3141:9;3132:7;3128:23;3124:32;3121:2;;;-1:-1;;3159:12;3121:2;3217:17;3204:31;3255:18;;3247:6;3244:30;3241:2;;;-1:-1;;3277:12;3241:2;3364:22;;;;1199:4;1178:19;;;1174:30;1171:2;;;-1:-1;;1207:12;1171:2;1235:20;1199:4;1235:20;:::i;:::-;1318:17;1305:31;3255:18;1348:6;1345:30;1342:2;;;-1:-1;;1378:12;1342:2;1423:59;1478:3;1469:6;1458:9;1454:22;1423:59;:::i;:::-;1405:16;1398:85;;1583:49;1628:3;3153:2;1608:9;1604:22;1583:49;:::i;:::-;3153:2;1569:5;1565:16;1558:75;1731:2;1720:9;1716:18;1703:32;3255:18;1747:6;1744:30;1741:2;;;-1:-1;;1777:12;1741:2;1822:59;1877:3;1868:6;1857:9;1853:22;1822:59;:::i;:::-;1731:2;1808:5;1804:16;1797:85;;1983:2;1972:9;1968:18;1955:32;3255:18;1999:6;1996:30;1993:2;;;-1:-1;;2029:12;1993:2;2074:59;2129:3;2120:6;2109:9;2105:22;2074:59;:::i;:::-;1983:2;2060:5;2056:16;2049:85;;2232:3;2221:9;2217:19;2204:33;3255:18;2249:6;2246:30;2243:2;;;-1:-1;;2279:12;2243:2;2324:58;2378:3;2369:6;2358:9;2354:22;2324:58;:::i;:::-;2232:3;2306:16;;2299:84;-1:-1;2310:5;3115:297;-1:-1;;;;;3115:297::o;5166:323::-;;5298:5;17766:12;18382:6;18377:3;18370:19;5381:52;5426:6;18419:4;18414:3;18410:14;18419:4;5407:5;5403:16;5381:52;:::i;:::-;16849:9;19812:14;-1:-1;;19808:28;5445:39;;;;18419:4;5445:39;;5246:243;-1:-1;;5246:243::o;9382:1307::-;;9617:16;9611:23;9545:4;9654:14;9647:38;9700:73;9545:4;9540:3;9536:14;9754:12;9700:73;:::i;:::-;9692:81;;19258:42;;;;;9864:4;9857:5;9853:16;9847:23;19247:54;9864:4;9928:3;9924:14;3786:37;10027:4;10020:5;10016:16;10010:23;10079:3;10073:4;10069:14;10027:4;10057:3;10053:14;10046:38;10099:73;10167:4;10153:12;10099:73;:::i;:::-;10091:81;;;10269:4;10262:5;10258:16;10252:23;10321:3;10315:4;10311:14;10269:4;10299:3;10295:14;10288:38;10341:73;10409:4;10395:12;10341:73;:::i;:::-;10333:81;;;10508:4;10501:5;10497:16;10491:23;10560:3;10554:4;10550:14;10508:4;10538:3;10534:14;10527:38;10580:71;10646:4;10632:12;10580:71;:::i;:::-;10673:11;9518:1171;-1:-1;;;;;9518:1171::o;12081:275::-;;5993:5;17766:12;6105:52;6150:6;6145:3;6138:4;6131:5;6127:16;6105:52;:::i;:::-;6169:16;;;;;12217:139;-1:-1;;12217:139::o;12363:269::-;;-1:-1;6359:5;6353:12;6393:1;;6382:9;6378:17;6406:1;6401:268;;;;6680:1;6675:425;;;;6371:729;;6401:268;-1:-1;;6606:25;;6594:38;;6475:1;6460:17;;6479:4;6456:28;6646:16;;;-1:-1;6401:268;;6675:425;6744:1;6733:9;6729:17;17567:3;-1:-1;17557:14;17599:4;;-1:-1;17586:18;-1:-1;6933:130;6947:6;6944:1;6941:13;6933:130;;;7006:14;;6993:11;;;6986:35;7040:15;;;;6962:12;;6933:130;;;-1:-1;;;7077:16;;;-1:-1;6371:729;-1:-1;12617:10;;12496:136;-1:-1;;;;;12496:136::o;12639:222::-;-1:-1;;;;;19247:54;;;;3786:37;;12766:2;12751:18;;12737:124::o;12868:514::-;;13117:2;;13106:9;13102:18;13117:2;13138:17;13131:47;13192:180;4323:5;17766:12;18382:6;18377:3;18370:19;18410:14;13106:9;18410:14;4335:129;;18410:14;13117:2;4521:6;4517:17;13106:9;4508:27;;4496:39;;13117:2;4642:5;17419:14;-1:-1;4681:438;4706:6;4703:1;4700:13;4681:438;;;4758:20;;13106:9;4762:4;4758:20;;4753:3;4746:33;3593:118;3707:3;4813:6;4807:13;3593:118;:::i;:::-;4827:144;-1:-1;5098:14;;;;18189;;;;4728:1;4721:9;4681:438;;;-1:-1;13184:188;;13088:294;-1:-1;;;;;;;13088:294::o;13389:416::-;13589:2;13603:47;;;7339:2;13574:18;;;18370:19;7375:34;18410:14;;;7355:55;-1:-1;;;7430:12;;;7423:30;7472:12;;;13560:245::o;13812:416::-;14012:2;14026:47;;;7723:2;13997:18;;;18370:19;7759:34;18410:14;;;7739:55;-1:-1;;;7814:12;;;7807:30;7856:12;;;13983:245::o;14235:416::-;14435:2;14449:47;;;14420:18;;;18370:19;8143:34;18410:14;;;8123:55;8197:12;;;14406:245::o;14658:416::-;14858:2;14872:47;;;8448:2;14843:18;;;18370:19;8484:32;18410:14;;;8464:53;8536:12;;;14829:245::o;15081:416::-;15281:2;15295:47;;;8787:2;15266:18;;;18370:19;8823:34;18410:14;;;8803:55;-1:-1;;;8878:12;;;8871:25;8915:12;;;15252:245::o;15504:416::-;15704:2;15718:47;;;9166:2;15689:18;;;18370:19;9202:34;18410:14;;;9182:55;-1:-1;;;9257:12;;;9250:26;9295:12;;;15675:245::o;15927:414::-;;16126:2;16147:17;16140:47;16201:130;16126:2;16115:9;16111:18;16317:6;16201:130;:::i;16348:256::-;16410:2;16404:9;16436:17;;;16511:18;16496:34;;16532:22;;;16493:62;16490:2;;;16568:1;;16558:12;16490:2;16410;16577:22;16388:216;;-1:-1;16388:216::o;19468:268::-;19533:1;19540:101;19554:6;19551:1;19548:13;19540:101;;;19621:11;;;19615:18;19602:11;;;19595:39;19576:2;19569:10;19540:101;;;19656:6;19653:1;19650:13;19647:2;;;-1:-1;;19533:1;19703:16;;19696:27;19517:219::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1076600",
                "executionCost": "23555",
                "totalCost": "1100155"
              },
              "external": {
                "addTransferDefinition((string,address,string,string,bytes))": "infinite",
                "getTransferDefinitions()": "infinite",
                "owner()": "1092",
                "removeTransferDefinition(string)": "infinite",
                "renounceOwnership()": "24204",
                "transferOwnership(address)": "24532"
              }
            },
            "methodIdentifiers": {
              "addTransferDefinition((string,address,string,string,bytes))": "55304c3f",
              "getTransferDefinitions()": "c9ff4d25",
              "owner()": "8da5cb5b",
              "removeTransferDefinition(string)": "961bf9b1",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"TransferAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"TransferRemoved\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"definition\",\"type\":\"tuple\"}],\"name\":\"addTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransferDefinitions\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"removeTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"addTransferDefinition((string,address,string,string,bytes))\":{\"details\":\"Should add a transfer definition to the registry\"},\"getTransferDefinitions()\":{\"details\":\"Should return all transfer defintions in registry\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeTransferDefinition(string)\":{\"details\":\"Should remove a transfer definition from the registry\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"TransferRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The TransferRegistry maintains an onchain record of all         supported transfers (specifically holds the registry information         defined within the contracts). The offchain protocol uses         this information to get the correct encodings when generating         signatures. The information stored here can only be updated         by the owner of the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/TransferRegistry.sol\":\"TransferRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../GSN/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor () {\\n        address msgSender = _msgSender();\\n        _owner = msgSender;\\n        emit OwnershipTransferred(address(0), msgSender);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(_owner == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\"keccak256\":\"0x74b0525c81e47810f1bd795755962bdb84de3a4f71cfcb063f4c4d4999a3e96b\",\"license\":\"MIT\"},\"src.sol/TransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ITransferRegistry.sol\\\";\\nimport \\\"./lib/LibIterableMapping.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/// @title TransferRegistry\\n/// @author Connext <support@connext.network>\\n/// @notice The TransferRegistry maintains an onchain record of all\\n///         supported transfers (specifically holds the registry information\\n///         defined within the contracts). The offchain protocol uses\\n///         this information to get the correct encodings when generating\\n///         signatures. The information stored here can only be updated\\n///         by the owner of the contract\\n\\ncontract TransferRegistry is Ownable, ITransferRegistry {\\n    using LibIterableMapping for LibIterableMapping.IterableMapping;\\n\\n    LibIterableMapping.IterableMapping transfers;\\n\\n    /// @dev Should add a transfer definition to the registry\\n    function addTransferDefinition(RegisteredTransfer memory definition)\\n        external\\n        override\\n        onlyOwner\\n    {\\n        // Get index transfer will be added at\\n        uint256 idx = transfers.length();\\n        \\n        // Add registered transfer\\n        transfers.addTransferDefinition(definition);\\n\\n        // Emit event\\n        emit TransferAdded(transfers.getTransferDefinitionByIndex(idx));\\n    }\\n\\n    /// @dev Should remove a transfer definition from the registry\\n    function removeTransferDefinition(string memory name)\\n        external\\n        override\\n        onlyOwner\\n    {\\n        // Get transfer from library to remove for event\\n        RegisteredTransfer memory transfer = transfers.getTransferDefinitionByName(name);\\n\\n        // Remove transfer\\n        transfers.removeTransferDefinition(name);\\n\\n        // Emit event\\n        emit TransferRemoved(transfer);\\n    }\\n\\n    /// @dev Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        override\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        return transfers.getTransferDefinitions();\\n    }\\n}\\n\",\"keccak256\":\"0xe0bbdc74c5635a2b21ab1a0f2b4ebb377af048f05cc2bab70f645ac826984382\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibIterableMapping.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title LibIterableMapping\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides an efficient way to store and retrieve\\n///         RegisteredTransfers. This contract is used to manage the transfers\\n///         stored by `TransferRegistry.sol`\\nlibrary LibIterableMapping {\\n    struct TransferDefinitionWithIndex {\\n        RegisteredTransfer transfer;\\n        uint256 index;\\n    }\\n\\n    struct IterableMapping {\\n        mapping(string => TransferDefinitionWithIndex) transfers;\\n        string[] names;\\n    }\\n\\n    function stringEqual(string memory s, string memory t)\\n        internal\\n        pure\\n        returns (bool)\\n    {\\n        return keccak256(abi.encodePacked(s)) == keccak256(abi.encodePacked(t));\\n    }\\n\\n    function isEmptyString(string memory s) internal pure returns (bool) {\\n        return stringEqual(s, \\\"\\\");\\n    }\\n\\n    function nameExists(IterableMapping storage self, string memory name)\\n        internal\\n        view\\n        returns (bool)\\n    {\\n        return\\n            !isEmptyString(name) &&\\n            self.names.length != 0 &&\\n            stringEqual(self.names[self.transfers[name].index], name);\\n    }\\n\\n    function length(IterableMapping storage self)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return self.names.length;\\n    }\\n\\n    function getTransferDefinitionByName(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        return self.transfers[name].transfer;\\n    }\\n\\n    function getTransferDefinitionByIndex(\\n        IterableMapping storage self,\\n        uint256 index\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(index < self.names.length, \\\"LibIterableMapping: INVALID_INDEX\\\");\\n        return self.transfers[self.names[index]].transfer;\\n    }\\n\\n    function getTransferDefinitions(IterableMapping storage self)\\n        internal\\n        view\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        uint256 l = self.names.length;\\n        RegisteredTransfer[] memory transfers = new RegisteredTransfer[](l);\\n        for (uint256 i = 0; i < l; i++) {\\n            transfers[i] = self.transfers[self.names[i]].transfer;\\n        }\\n        return transfers;\\n    }\\n\\n    function addTransferDefinition(\\n        IterableMapping storage self,\\n        RegisteredTransfer memory transfer\\n    ) internal {\\n        string memory name = transfer.name;\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(!nameExists(self, name), \\\"LibIterableMapping: NAME_ALREADY_ADDED\\\");\\n        self.transfers[name] = TransferDefinitionWithIndex({\\n            transfer: transfer,\\n            index: self.names.length\\n        });\\n        self.names.push(name);\\n    }\\n\\n    function removeTransferDefinition(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal {\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        uint256 index = self.transfers[name].index;\\n        string memory lastName = self.names[self.names.length - 1];\\n        self.transfers[lastName].index = index;\\n        self.names[index] = lastName;\\n        delete self.transfers[name];\\n        self.names.pop();\\n    }\\n}\\n\",\"keccak256\":\"0x52d4a240bb76e9892af1ecbf6cf72995890db0b115a36a54e1b0115f0f47ce8a\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 30,
                "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                "label": "_owner",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 3458,
                "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                "label": "transfers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(IterableMapping)4424_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_string_storage)dyn_storage": {
                "base": "t_string_storage",
                "encoding": "dynamic_array",
                "label": "string[]",
                "numberOfBytes": "32"
              },
              "t_bytes_storage": {
                "encoding": "bytes",
                "label": "bytes",
                "numberOfBytes": "32"
              },
              "t_mapping(t_string_memory_ptr,t_struct(TransferDefinitionWithIndex)4416_storage)": {
                "encoding": "mapping",
                "key": "t_string_memory_ptr",
                "label": "mapping(string => struct LibIterableMapping.TransferDefinitionWithIndex)",
                "numberOfBytes": "32",
                "value": "t_struct(TransferDefinitionWithIndex)4416_storage"
              },
              "t_string_memory_ptr": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_struct(IterableMapping)4424_storage": {
                "encoding": "inplace",
                "label": "struct LibIterableMapping.IterableMapping",
                "members": [
                  {
                    "astId": 4420,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "transfers",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_mapping(t_string_memory_ptr,t_struct(TransferDefinitionWithIndex)4416_storage)"
                  },
                  {
                    "astId": 4423,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "names",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_array(t_string_storage)dyn_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(RegisteredTransfer)3967_storage": {
                "encoding": "inplace",
                "label": "struct RegisteredTransfer",
                "members": [
                  {
                    "astId": 3958,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "name",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 3960,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "definition",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_address"
                  },
                  {
                    "astId": 3962,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "stateEncoding",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 3964,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "resolverEncoding",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 3966,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "encodedCancel",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_bytes_storage"
                  }
                ],
                "numberOfBytes": "160"
              },
              "t_struct(TransferDefinitionWithIndex)4416_storage": {
                "encoding": "inplace",
                "label": "struct LibIterableMapping.TransferDefinitionWithIndex",
                "members": [
                  {
                    "astId": 4413,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "transfer",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(RegisteredTransfer)3967_storage"
                  },
                  {
                    "astId": 4415,
                    "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                    "label": "index",
                    "offset": 0,
                    "slot": "5",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "192"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "The TransferRegistry maintains an onchain record of all         supported transfers (specifically holds the registry information         defined within the contracts). The offchain protocol uses         this information to get the correct encodings when generating         signatures. The information stored here can only be updated         by the owner of the contract",
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ICMCAdjudicator.sol": {
        "ICMCAdjudicator": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                }
              ],
              "name": "ChannelDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "ChannelDisputed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedInitialState",
                  "type": "bytes"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "TransferDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "TransferDisputed",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "indices",
                  "type": "uint256[]"
                }
              ],
              "name": "defundChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedInitialTransferState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedTransferResolver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "responderSignature",
                  "type": "bytes"
                }
              ],
              "name": "defundTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "disputeChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "merkleProofData",
                  "type": "bytes32[]"
                }
              ],
              "name": "disputeTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChannelDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getDefundNonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "transferId",
                  "type": "bytes32"
                }
              ],
              "name": "getTransferDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "4d3fcbda",
              "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "072f25fd",
              "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "c60939be",
              "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "5fd334d9",
              "getChannelDispute()": "f19eb10e",
              "getDefundNonce(address)": "e7283a8d",
              "getTransferDispute(bytes32)": "3ff0da16"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"}],\"name\":\"ChannelDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"ChannelDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedInitialState\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"indexed\":false,\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"TransferDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"TransferDisputed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"defundChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedInitialTransferState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedTransferResolver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responderSignature\",\"type\":\"bytes\"}],\"name\":\"defundTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"disputeChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProofData\",\"type\":\"bytes32[]\"}],\"name\":\"disputeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChannelDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getDefundNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"getTransferDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ICMCAdjudicator.sol\":\"ICMCAdjudicator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ICMCAsset.sol": {
        "ICMCAsset": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "exit(address,address,address)": "5bc9d96d",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalTransferred(address)": "cefa5122"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ICMCAsset.sol\":\"ICMCAsset\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ICMCCore.sol": {
        "ICMCCore": {
          "abi": [
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "setup(address,address)": "2d34ba79"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ICMCCore.sol\":\"ICMCCore\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ICMCDeposit.sol": {
        "ICMCDeposit": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "depositAlice(address,uint256)": "635ae901",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ICMCDeposit.sol\":\"ICMCDeposit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ICMCWithdraw.sol": {
        "ICMCWithdraw": {
          "abi": [
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                }
              ],
              "name": "getWithdrawalTransactionRecord",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "8c048fc2",
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "2c889aa1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"}],\"name\":\"getWithdrawalTransactionRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ICMCWithdraw.sol\":\"ICMCWithdraw\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/IChannelFactory.sol": {
        "IChannelFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "name": "ChannelCreation",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "createChannel",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "createChannelAndDepositAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChainId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "getChannelAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getMastercopy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getProxyCreationCode",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getStoredChainId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "createChannel(address,address)": "35a1ba6f",
              "createChannelAndDepositAlice(address,address,address,uint256)": "fe454501",
              "getChainId()": "3408e470",
              "getChannelAddress(address,address)": "e617aaac",
              "getMastercopy()": "efe43693",
              "getProxyCreationCode()": "15727e91",
              "getStoredChainId()": "32a130c9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"name\":\"ChannelCreation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"createChannel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"createChannelAndDepositAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"getChannelAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMastercopy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStoredChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/IChannelFactory.sol\":\"IChannelFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/IChannelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface IChannelFactory {\\n    event ChannelCreation(address channel);\\n\\n    function getMastercopy() external view returns (address);\\n\\n    function getChainId() external view returns (uint256);\\n\\n    function getStoredChainId() external view returns (uint256);\\n\\n    function getProxyCreationCode() external view returns (bytes memory);\\n\\n    function getChannelAddress(address alice, address bob)\\n        external\\n        view\\n        returns (address);\\n\\n    function createChannel(address alice, address bob)\\n        external\\n        returns (address);\\n\\n    function createChannelAndDepositAlice(\\n        address alice,\\n        address bob,\\n        address assetId,\\n        uint256 amount\\n    ) external payable returns (address);\\n}\\n\",\"keccak256\":\"0x2330bd554f878feb2494fb9dd830a1707865b63cfd6471a8dad1e5912ebf72ea\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ITestChannel.sol": {
        "ITestChannel": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                }
              ],
              "name": "ChannelDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "ChannelDisputed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedInitialState",
                  "type": "bytes"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "TransferDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "TransferDisputed",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "indices",
                  "type": "uint256[]"
                }
              ],
              "name": "defundChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedInitialTransferState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedTransferResolver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "responderSignature",
                  "type": "bytes"
                }
              ],
              "name": "defundTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "disputeChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "merkleProofData",
                  "type": "bytes32[]"
                }
              ],
              "name": "disputeTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChannelDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getDefundNonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "transferId",
                  "type": "bytes32"
                }
              ],
              "name": "getTransferDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                }
              ],
              "name": "getWithdrawalTransactionRecord",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "testMakeBalanceExitable",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxAmount",
                  "type": "uint256"
                }
              ],
              "name": "testMakeExitable",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "4d3fcbda",
              "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "072f25fd",
              "depositAlice(address,uint256)": "635ae901",
              "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "c60939be",
              "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "5fd334d9",
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getChannelDispute()": "f19eb10e",
              "getDefundNonce(address)": "e7283a8d",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8",
              "getTotalTransferred(address)": "cefa5122",
              "getTransferDispute(bytes32)": "3ff0da16",
              "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "8c048fc2",
              "setup(address,address)": "2d34ba79",
              "testMakeBalanceExitable(address,(uint256[2],address[2]))": "7b037295",
              "testMakeExitable(address,address,uint256)": "c55e1dac",
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "2c889aa1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"}],\"name\":\"ChannelDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"ChannelDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedInitialState\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"indexed\":false,\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"TransferDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"TransferDisputed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"defundChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedInitialTransferState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedTransferResolver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responderSignature\",\"type\":\"bytes\"}],\"name\":\"defundTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"disputeChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProofData\",\"type\":\"bytes32[]\"}],\"name\":\"disputeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChannelDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getDefundNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"getTransferDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"}],\"name\":\"getWithdrawalTransactionRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"testMakeBalanceExitable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"}],\"name\":\"testMakeExitable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ITestChannel.sol\":\"ITestChannel\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITestChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./IVectorChannel.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITestChannel is IVectorChannel {\\n    function testMakeExitable(\\n        address assetId,\\n        address payable recipient,\\n        uint256 maxAmount\\n    ) external;\\n\\n    function testMakeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) external;\\n}\\n\",\"keccak256\":\"0xc33ba932ee6d2e0c16b808cec6d1e88b805cbc62119b28755bb22881e64efbaa\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ITransferDefinition.sol": {
        "ITransferDefinition": {
          "abi": [
            {
              "inputs": [],
              "name": "EncodedCancel",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "Name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ResolverEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "StateEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "name": "create",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getRegistryInformation",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "name": "resolve",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "internalType": "struct Balance",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "EncodedCancel()": "0528aa1c",
              "Name()": "8052474d",
              "ResolverEncoding()": "3722aff9",
              "StateEncoding()": "8de8b77e",
              "create(bytes,bytes)": "94184ba9",
              "getRegistryInformation()": "206162be",
              "resolve(bytes,bytes,bytes)": "8ef98a7e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EncodedCancel\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ResolverEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"StateEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegistryInformation\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"resolve\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ITransferDefinition.sol\":\"ITransferDefinition\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/ITransferRegistry.sol": {
        "ITransferRegistry": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct RegisteredTransfer",
                  "name": "transfer",
                  "type": "tuple"
                }
              ],
              "name": "TransferAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct RegisteredTransfer",
                  "name": "transfer",
                  "type": "tuple"
                }
              ],
              "name": "TransferRemoved",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "transfer",
                  "type": "tuple"
                }
              ],
              "name": "addTransferDefinition",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getTransferDefinitions",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                }
              ],
              "name": "removeTransferDefinition",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "addTransferDefinition((string,address,string,string,bytes))": "55304c3f",
              "getTransferDefinitions()": "c9ff4d25",
              "removeTransferDefinition(string)": "961bf9b1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"TransferAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"TransferRemoved\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"addTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransferDefinitions\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"removeTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/ITransferRegistry.sol\":\"ITransferRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/IVectorChannel.sol": {
        "IVectorChannel": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                }
              ],
              "name": "ChannelDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "ChannelDisputed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedInitialState",
                  "type": "bytes"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "TransferDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "TransferDisputed",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "indices",
                  "type": "uint256[]"
                }
              ],
              "name": "defundChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedInitialTransferState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedTransferResolver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "responderSignature",
                  "type": "bytes"
                }
              ],
              "name": "defundTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "disputeChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "merkleProofData",
                  "type": "bytes32[]"
                }
              ],
              "name": "disputeTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChannelDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getDefundNonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "transferId",
                  "type": "bytes32"
                }
              ],
              "name": "getTransferDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                }
              ],
              "name": "getWithdrawalTransactionRecord",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "4d3fcbda",
              "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "072f25fd",
              "depositAlice(address,uint256)": "635ae901",
              "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "c60939be",
              "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "5fd334d9",
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getChannelDispute()": "f19eb10e",
              "getDefundNonce(address)": "e7283a8d",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8",
              "getTotalTransferred(address)": "cefa5122",
              "getTransferDispute(bytes32)": "3ff0da16",
              "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "8c048fc2",
              "setup(address,address)": "2d34ba79",
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "2c889aa1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"}],\"name\":\"ChannelDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"ChannelDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedInitialState\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"indexed\":false,\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"TransferDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"TransferDisputed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"defundChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedInitialTransferState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedTransferResolver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responderSignature\",\"type\":\"bytes\"}],\"name\":\"defundTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"disputeChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProofData\",\"type\":\"bytes32[]\"}],\"name\":\"disputeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChannelDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getDefundNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"getTransferDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"}],\"name\":\"getWithdrawalTransactionRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/IVectorChannel.sol\":\"IVectorChannel\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/interfaces/WithdrawHelper.sol": {
        "WithdrawHelper": {
          "abi": [
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "uint256",
                  "name": "actualAmount",
                  "type": "uint256"
                }
              ],
              "name": "execute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "execute((address,address,address,uint256,uint256,address,bytes),uint256)": "f50cd32c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actualAmount\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/interfaces/WithdrawHelper.sol\":\"WithdrawHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/WithdrawHelper.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCWithdraw.sol\\\";\\n\\ninterface WithdrawHelper {\\n    function execute(WithdrawData calldata wd, uint256 actualAmount) external;\\n}\\n\",\"keccak256\":\"0x45bd70363bc7a45001589d55d8d068a3baa321c50382c0c73f1ffae45adfc4bb\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/lib/LibAsset.sol": {
        "LibAsset": {
          "abi": [],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "LibAsset",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de546282016f736497fd2e5e2da675cd5f58ca277751e9cf371f680b0f62bc0c64736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE SLOAD PUSH3 0x82016F PUSH20 0x6497FD2E5E2DA675CD5F58CA277751E9CF371F68 SIGNEXTEND 0xF PUSH3 0xBC0C64 PUSH20 0x6F6C634300070100330000000000000000000000 ",
              "sourceMap": "573:1999:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de546282016f736497fd2e5e2da675cd5f58ca277751e9cf371f680b0f62bc0c64736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE SLOAD PUSH3 0x82016F PUSH20 0x6497FD2E5E2DA675CD5F58CA277751E9CF371F68 SIGNEXTEND 0xF PUSH3 0xBC0C64 PUSH20 0x6F6C634300070100330000000000000000000000 ",
              "sourceMap": "573:1999:32:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "getOwnBalance(address)": "infinite",
                "isEther(address)": "infinite",
                "transferERC20(address,address,uint256)": "infinite",
                "transferEther(address payable,uint256)": "infinite",
                "unregisteredTransfer(address,address payable,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibAsset\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains helpers for dealing with onchain transfers         of in-channel assets. It is designed to safely handle all asset         transfers out of channel in the event of an onchain dispute. Also         safely handles ERC20 transfers that may be non-compliant\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/lib/LibAsset.sol\":\"LibAsset\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This library contains helpers for dealing with onchain transfers         of in-channel assets. It is designed to safely handle all asset         transfers out of channel in the event of an onchain dispute. Also         safely handles ERC20 transfers that may be non-compliant",
            "version": 1
          }
        }
      },
      "src.sol/lib/LibChannelCrypto.sol": {
        "LibChannelCrypto": {
          "abi": [],
          "devdoc": {
            "author": "Connext <support@connext.network>\t\t",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ffe11ad2b42a2d91e25c36a8a9dd926c4e5543221877913083a7e3cb71065b4664736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT 0xE1 BYTE 0xD2 0xB4 0x2A 0x2D SWAP2 0xE2 0x5C CALLDATASIZE 0xA8 0xA9 0xDD SWAP3 PUSH13 0x4E5543221877913083A7E3CB71 MOD JUMPDEST CHAINID PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "517:1627:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ffe11ad2b42a2d91e25c36a8a9dd926c4e5543221877913083a7e3cb71065b4664736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT 0xE1 BYTE 0xD2 0xB4 0x2A 0x2D SWAP2 0xE2 0x5C CALLDATASIZE 0xA8 0xA9 0xDD SWAP3 PUSH13 0x4E5543221877913083A7E3CB71 MOD JUMPDEST CHAINID PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "517:1627:33:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "checkSignature(bytes32,bytes memory,address)": "infinite",
                "checkUtilitySignature(bytes32,bytes memory,address)": "infinite",
                "recoverChannelMessageSigner(bytes32,bytes memory)": "infinite",
                "recoverUtilityMessageSigner(bytes32,bytes memory)": "infinite",
                "toChannelSignedMessage(bytes32)": "infinite",
                "toUtilitySignedMessage(bytes32)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\\t\\t\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains helpers for recovering signatures from a\\t\\t         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t         messages to prevent misuse of private keys by injected providers,\\t\\t         and instead only sign messages with a Vector channel prefix.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/lib/LibChannelCrypto.sol\":\"LibChannelCrypto\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"},\"src.sol/lib/LibChannelCrypto.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/cryptography/ECDSA.sol\\\";\\n\\t\\t\\n/// @author Connext <support@connext.network>\\t\\t\\n/// @notice This library contains helpers for recovering signatures from a\\t\\t\\n///         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t\\n///         messages to prevent misuse of private keys by injected providers,\\t\\t\\n///         and instead only sign messages with a Vector channel prefix.\\nlibrary LibChannelCrypto {\\n    function checkSignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toChannelSignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toChannelSignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x16Vector Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    function checkUtilitySignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toUtilitySignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toUtilitySignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x17Utility Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xb8aa3679b75f2a1a5785f614f5dff9a76a689c18caa56a8df1f4e3c3167d6ece\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This library contains helpers for recovering signatures from a\t\t         Vector commitments. Channels do not allow for arbitrary signing of\t\t         messages to prevent misuse of private keys by injected providers,\t\t         and instead only sign messages with a Vector channel prefix.",
            "version": 1
          }
        }
      },
      "src.sol/lib/LibERC20.sol": {
        "LibERC20": {
          "abi": [],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "LibERC20",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220afee9c5de2feb717370a1fb421ccbbc6083501139ba58299df314b85908b3a4b64736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0xEE SWAP13 0x5D 0xE2 INVALID 0xB7 OR CALLDATACOPY EXP 0x1F 0xB4 0x21 0xCC 0xBB 0xC6 ADDMOD CALLDATALOAD ADD SGT SWAP12 0xA5 DUP3 SWAP10 0xDF BALANCE 0x4B DUP6 SWAP1 DUP12 GASPRICE 0x4B PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "416:1608:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220afee9c5de2feb717370a1fb421ccbbc6083501139ba58299df314b85908b3a4b64736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0xEE SWAP13 0x5D 0xE2 INVALID 0xB7 OR CALLDATACOPY EXP 0x1F 0xB4 0x21 0xCC 0xBB 0xC6 ADDMOD CALLDATALOAD ADD SGT SWAP12 0xA5 DUP3 SWAP10 0xDF BALANCE 0x4B DUP6 SWAP1 DUP12 GASPRICE 0x4B PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "416:1608:34:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "approve(address,address,uint256)": "infinite",
                "transfer(address,address,uint256)": "infinite",
                "transferFrom(address,address,address,uint256)": "infinite",
                "wrapCall(address,bytes memory)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library provides several functions to safely handle         noncompliant tokens (i.e. does not return a boolean from         the transfer function)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/lib/LibERC20.sol\":\"LibERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This library provides several functions to safely handle         noncompliant tokens (i.e. does not return a boolean from         the transfer function)",
            "version": 1
          }
        }
      },
      "src.sol/lib/LibIterableMapping.sol": {
        "LibIterableMapping": {
          "abi": [],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "LibIterableMapping",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220311f6ce141fdc87aba3cc0f297f871eaf0c36f65af44b85cb0f2421219ea373e64736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE 0x1F PUSH13 0xE141FDC87ABA3CC0F297F871EA CREATE 0xC3 PUSH16 0x65AF44B85CB0F2421219EA373E64736F PUSH13 0x63430007010033000000000000 ",
              "sourceMap": "418:3124:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220311f6ce141fdc87aba3cc0f297f871eaf0c36f65af44b85cb0f2421219ea373e64736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE 0x1F PUSH13 0xE141FDC87ABA3CC0F297F871EA CREATE 0xC3 PUSH16 0x65AF44B85CB0F2421219EA373E64736F PUSH13 0x63430007010033000000000000 ",
              "sourceMap": "418:3124:35:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "addTransferDefinition(struct LibIterableMapping.IterableMapping storage pointer,struct RegisteredTransfer memory)": "infinite",
                "getTransferDefinitionByIndex(struct LibIterableMapping.IterableMapping storage pointer,uint256)": "infinite",
                "getTransferDefinitionByName(struct LibIterableMapping.IterableMapping storage pointer,string memory)": "infinite",
                "getTransferDefinitions(struct LibIterableMapping.IterableMapping storage pointer)": "infinite",
                "isEmptyString(string memory)": "infinite",
                "length(struct LibIterableMapping.IterableMapping storage pointer)": "infinite",
                "nameExists(struct LibIterableMapping.IterableMapping storage pointer,string memory)": "infinite",
                "removeTransferDefinition(struct LibIterableMapping.IterableMapping storage pointer,string memory)": "infinite",
                "stringEqual(string memory,string memory)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibIterableMapping\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library provides an efficient way to store and retrieve         RegisteredTransfers. This contract is used to manage the transfers         stored by `TransferRegistry.sol`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/lib/LibIterableMapping.sol\":\"LibIterableMapping\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibIterableMapping.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title LibIterableMapping\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides an efficient way to store and retrieve\\n///         RegisteredTransfers. This contract is used to manage the transfers\\n///         stored by `TransferRegistry.sol`\\nlibrary LibIterableMapping {\\n    struct TransferDefinitionWithIndex {\\n        RegisteredTransfer transfer;\\n        uint256 index;\\n    }\\n\\n    struct IterableMapping {\\n        mapping(string => TransferDefinitionWithIndex) transfers;\\n        string[] names;\\n    }\\n\\n    function stringEqual(string memory s, string memory t)\\n        internal\\n        pure\\n        returns (bool)\\n    {\\n        return keccak256(abi.encodePacked(s)) == keccak256(abi.encodePacked(t));\\n    }\\n\\n    function isEmptyString(string memory s) internal pure returns (bool) {\\n        return stringEqual(s, \\\"\\\");\\n    }\\n\\n    function nameExists(IterableMapping storage self, string memory name)\\n        internal\\n        view\\n        returns (bool)\\n    {\\n        return\\n            !isEmptyString(name) &&\\n            self.names.length != 0 &&\\n            stringEqual(self.names[self.transfers[name].index], name);\\n    }\\n\\n    function length(IterableMapping storage self)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return self.names.length;\\n    }\\n\\n    function getTransferDefinitionByName(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        return self.transfers[name].transfer;\\n    }\\n\\n    function getTransferDefinitionByIndex(\\n        IterableMapping storage self,\\n        uint256 index\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(index < self.names.length, \\\"LibIterableMapping: INVALID_INDEX\\\");\\n        return self.transfers[self.names[index]].transfer;\\n    }\\n\\n    function getTransferDefinitions(IterableMapping storage self)\\n        internal\\n        view\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        uint256 l = self.names.length;\\n        RegisteredTransfer[] memory transfers = new RegisteredTransfer[](l);\\n        for (uint256 i = 0; i < l; i++) {\\n            transfers[i] = self.transfers[self.names[i]].transfer;\\n        }\\n        return transfers;\\n    }\\n\\n    function addTransferDefinition(\\n        IterableMapping storage self,\\n        RegisteredTransfer memory transfer\\n    ) internal {\\n        string memory name = transfer.name;\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(!nameExists(self, name), \\\"LibIterableMapping: NAME_ALREADY_ADDED\\\");\\n        self.transfers[name] = TransferDefinitionWithIndex({\\n            transfer: transfer,\\n            index: self.names.length\\n        });\\n        self.names.push(name);\\n    }\\n\\n    function removeTransferDefinition(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal {\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        uint256 index = self.transfers[name].index;\\n        string memory lastName = self.names[self.names.length - 1];\\n        self.transfers[lastName].index = index;\\n        self.names[index] = lastName;\\n        delete self.transfers[name];\\n        self.names.pop();\\n    }\\n}\\n\",\"keccak256\":\"0x52d4a240bb76e9892af1ecbf6cf72995890db0b115a36a54e1b0115f0f47ce8a\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This library provides an efficient way to store and retrieve         RegisteredTransfers. This contract is used to manage the transfers         stored by `TransferRegistry.sol`",
            "version": 1
          }
        }
      },
      "src.sol/lib/LibMath.sol": {
        "LibMath": {
          "abi": [],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "LibMath",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122068974e12781647e0e945c2d897b0463feb30c437665760db574bfd6b56fea0ad64736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x974E12781647E0E945 0xC2 0xD8 SWAP8 0xB0 CHAINID EXTCODEHASH 0xEB ADDRESS 0xC4 CALLDATACOPY PUSH7 0x5760DB574BFD6B JUMP INVALID LOG0 0xAD PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "498:295:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122068974e12781647e0e945c2d897b0463feb30c437665760db574bfd6b56fea0ad64736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x974E12781647E0E945 0xC2 0xD8 SWAP8 0xB0 CHAINID EXTCODEHASH 0xEB ADDRESS 0xC4 CALLDATACOPY PUSH7 0x5760DB574BFD6B JUMP INVALID LOG0 0xAD PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "498:295:36:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "satAdd(uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibMath\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library allows functions that would otherwise overflow and         revert if SafeMath was used to instead return the UINT_MAX. In the         adjudicator, this is used to ensure you can get the majority of         funds out in the event your balance > UINT_MAX and there is an         onchain dispute.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/lib/LibMath.sol\":\"LibMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This library allows functions that would otherwise overflow and         revert if SafeMath was used to instead return the UINT_MAX. In the         adjudicator, this is used to ensure you can get the majority of         funds out in the event your balance > UINT_MAX and there is an         onchain dispute.",
            "version": 1
          }
        }
      },
      "src.sol/lib/LibUtils.sol": {
        "LibUtils": {
          "abi": [],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "LibUtils",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122083ff01856b606e353d2036c503d9b762f70d2c34c83a29c7ed79db6bcb8d6ac164736f6c63430007010033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 SELFDESTRUCT ADD DUP6 PUSH12 0x606E353D2036C503D9B762F7 0xD 0x2C CALLVALUE 0xC8 GASPRICE 0x29 0xC7 0xED PUSH26 0xDB6BCB8D6AC164736F6C63430007010033000000000000000000 ",
              "sourceMap": "252:338:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122083ff01856b606e353d2036c503d9b762f70d2c34c83a29c7ed79db6bcb8d6ac164736f6c63430007010033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 SELFDESTRUCT ADD DUP6 PUSH12 0x606E353D2036C503D9B762F7 0xD 0x2C CALLVALUE 0xC8 GASPRICE 0x29 0xC7 0xED PUSH26 0xDB6BCB8D6AC164736F6C63430007010033000000000000000000 ",
              "sourceMap": "252:338:37:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "revertIfCallFailed(bool,bytes memory)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibUtils\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains a helper to revert if a call was not successfully         made\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/lib/LibUtils.sol\":\"LibUtils\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Contains a helper to revert if a call was not successfully         made",
            "version": 1
          }
        }
      },
      "src.sol/testing/FailingToken.sol": {
        "FailingToken": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rejectEther",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "_rejectEther",
                  "type": "bool"
                }
              ],
              "name": "setRejectEther",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "_transferShouldFail",
                  "type": "bool"
                }
              ],
              "name": "setTransferShouldFail",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "_transferShouldRevert",
                  "type": "bool"
                }
              ],
              "name": "setTransferShouldRevert",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "succeedingTransfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "transferShouldFail",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "transferShouldRevert",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b50604080518082018252600d81526c2330b4b634b733902a37b5b2b760991b6020808301918252835180850190945260048452631190525360e21b908401528151919291620000639160039162000226565b5080516200007990600490602084019062000226565b50506005805461ff001960ff199091166012171661010017905550620000aa3369d3c21bcecceda1000000620000b0565b620002c2565b6001600160a01b0382166200010c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200011a60008383620001bf565b6200013681600254620001c460201b620009691790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200016991839062000969620001c4821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b6000828201838110156200021f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026957805160ff191683800117855562000299565b8280016001018555821562000299579182015b82811115620002995782518255916020019190600101906200027c565b50620002a7929150620002ab565b5090565b5b80821115620002a75760008155600101620002ac565b6110e880620002d26000396000f3fe6080604052600436106101235760003560e01c806370a08231116100a0578063a457c2d711610064578063a457c2d7146104a0578063a9059cbb146104d9578063c38b79ef14610512578063dd62ed3e1461053e578063ff0a85701461057957610181565b806370a08231146103f5578063805c44ae146104285780639299dc731461043d57806395d89b41146104525780639dc29fac1461046757610181565b806323b872dd116100e757806323b872dd146102e9578063313ce5671461032c578063395093511461035757806340c10f1914610390578063468c15a9146103c957610181565b806306fdde0314610186578063095ea7b3146102105780630cf96c3b1461025d57806318160ddd146102895780631f7fbbee146102b057610181565b36610181576005546301000000900460ff161561017f576040805162461bcd60e51b8152602060048201526015602482015274115490cc8c0e88115512115497d491529150d51151605a1b604482015290519081900360640190fd5b005b600080fd5b34801561019257600080fd5b5061019b61058e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d55781810151838201526020016101bd565b50505050905090810190601f1680156102025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021c57600080fd5b506102496004803603604081101561023357600080fd5b506001600160a01b038135169060200135610624565b604080519115158252519081900360200190f35b34801561026957600080fd5b506102496004803603602081101561028057600080fd5b50351515610642565b34801561029557600080fd5b5061029e610663565b60408051918252519081900360200190f35b3480156102bc57600080fd5b50610249600480360360408110156102d357600080fd5b506001600160a01b038135169060200135610669565b3480156102f557600080fd5b506102496004803603606081101561030c57600080fd5b506001600160a01b0381358116916020810135909116906040013561067c565b34801561033857600080fd5b506103416106fe565b6040805160ff9092168252519081900360200190f35b34801561036357600080fd5b506102496004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610707565b34801561039c57600080fd5b5061017f600480360360408110156103b357600080fd5b506001600160a01b03813516906020013561075a565b3480156103d557600080fd5b50610249600480360360208110156103ec57600080fd5b50351515610768565b34801561040157600080fd5b5061029e6004803603602081101561041857600080fd5b50356001600160a01b0316610787565b34801561043457600080fd5b506102496107a2565b34801561044957600080fd5b506102496107b2565b34801561045e57600080fd5b5061019b6107c0565b34801561047357600080fd5b5061017f6004803603604081101561048a57600080fd5b506001600160a01b038135169060200135610821565b3480156104ac57600080fd5b50610249600480360360408110156104c357600080fd5b506001600160a01b03813516906020013561082b565b3480156104e557600080fd5b50610249600480360360408110156104fc57600080fd5b506001600160a01b038135169060200135610893565b34801561051e57600080fd5b506102496004803603602081101561053557600080fd5b5035151561090c565b34801561054a57600080fd5b5061029e6004803603604081101561056157600080fd5b506001600160a01b038135811691602001351661092f565b34801561058557600080fd5b5061024961095a565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561061a5780601f106105ef5761010080835404028352916020019161061a565b820191906000526020600020905b8154815290600101906020018083116105fd57829003601f168201915b5050505050905090565b60006106386106316109c3565b84846109c7565b5060015b92915050565b6005805462ff00001916620100009215158302179081905560ff9190041690565b60025490565b60006106758383610ab3565b9392505050565b600554600090610100900460ff16156106d2576040805162461bcd60e51b81526020600482015260136024820152722320a4a61d102330b4b634b733903a37b5b2b760691b604482015290519081900360640190fd5b60055462010000900460ff16156106eb57506000610675565b6106f6848484610ac7565b949350505050565b60055460ff1690565b60006106386107146109c3565b8461075585600160006107256109c3565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610969565b6109c7565b6107648282610b49565b5050565b6005805461ff0019166101009215158302179081905560ff9190041690565b6001600160a01b031660009081526020819052604090205490565b6005546301000000900460ff1681565b600554610100900460ff1681565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561061a5780601f106105ef5761010080835404028352916020019161061a565b6107648282610c39565b60006106386108386109c3565b846107558560405180606001604052806025815260200161108e60259139600160006108626109c3565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610d35565b600554600090610100900460ff16156108e9576040805162461bcd60e51b81526020600482015260136024820152722320a4a61d102330b4b634b733903a37b5b2b760691b604482015290519081900360640190fd5b60055462010000900460ff16156109025750600061063c565b6106758383610ab3565b6005805463ff000000191663010000009215158302179081905560ff9190041690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60055462010000900460ff1681565b600082820183811015610675576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316610a0c5760405162461bcd60e51b815260040180806020018281038252602481526020018061106a6024913960400191505060405180910390fd5b6001600160a01b038216610a515760405162461bcd60e51b8152600401808060200182810382526022815260200180610fb46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610638610ac06109c3565b8484610dcc565b6000610ad4848484610dcc565b610b3f84610ae06109c3565b61075585604051806060016040528060288152602001610ffc602891396001600160a01b038a16600090815260016020526040812090610b1e6109c3565b6001600160a01b031681526020810191909152604001600020549190610d35565b5060019392505050565b6001600160a01b038216610ba4576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610bb060008383610f27565b600254610bbd9082610969565b6002556001600160a01b038216600090815260208190526040902054610be39082610969565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610c7e5760405162461bcd60e51b81526004018080602001828103825260218152602001806110246021913960400191505060405180910390fd5b610c8a82600083610f27565b610cc781604051806060016040528060228152602001610f92602291396001600160a01b0385166000908152602081905260409020549190610d35565b6001600160a01b038316600090815260208190526040902055600254610ced9082610f2c565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008184841115610dc45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d89578181015183820152602001610d71565b50505050905090810190601f168015610db65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316610e115760405162461bcd60e51b81526004018080602001828103825260258152602001806110456025913960400191505060405180910390fd5b6001600160a01b038216610e565760405162461bcd60e51b8152600401808060200182810382526023815260200180610f6f6023913960400191505060405180910390fd5b610e61838383610f27565b610e9e81604051806060016040528060268152602001610fd6602691396001600160a01b0386166000908152602081905260409020549190610d35565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610ecd9082610969565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b505050565b600061067583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d3556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220168610f351a7d7ef76909c9e325fe0179c4d1688e23b5c2bcbf1c95addad35e864736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xD DUP2 MSTORE PUSH13 0x2330B4B634B733902A37B5B2B7 PUSH1 0x99 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE PUSH1 0x4 DUP5 MSTORE PUSH4 0x11905253 PUSH1 0xE2 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH3 0x63 SWAP2 PUSH1 0x3 SWAP2 PUSH3 0x226 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x79 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x226 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH2 0xFF00 NOT PUSH1 0xFF NOT SWAP1 SWAP2 AND PUSH1 0x12 OR AND PUSH2 0x100 OR SWAP1 SSTORE POP PUSH3 0xAA CALLER PUSH10 0xD3C21BCECCEDA1000000 PUSH3 0xB0 JUMP JUMPDEST PUSH3 0x2C2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x10C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH3 0x11A PUSH1 0x0 DUP4 DUP4 PUSH3 0x1BF JUMP JUMPDEST PUSH3 0x136 DUP2 PUSH1 0x2 SLOAD PUSH3 0x1C4 PUSH1 0x20 SHL PUSH3 0x969 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH3 0x169 SWAP2 DUP4 SWAP1 PUSH3 0x969 PUSH3 0x1C4 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH3 0x21F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x269 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x299 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x299 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x299 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x27C JUMP JUMPDEST POP PUSH3 0x2A7 SWAP3 SWAP2 POP PUSH3 0x2AB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2A7 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2AC JUMP JUMPDEST PUSH2 0x10E8 DUP1 PUSH3 0x2D2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x123 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4A0 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xC38B79EF EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x53E JUMPI DUP1 PUSH4 0xFF0A8570 EQ PUSH2 0x579 JUMPI PUSH2 0x181 JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x805C44AE EQ PUSH2 0x428 JUMPI DUP1 PUSH4 0x9299DC73 EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x452 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x467 JUMPI PUSH2 0x181 JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x32C JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x468C15A9 EQ PUSH2 0x3C9 JUMPI PUSH2 0x181 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xCF96C3B EQ PUSH2 0x25D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x1F7FBBEE EQ PUSH2 0x2B0 JUMPI PUSH2 0x181 JUMP JUMPDEST CALLDATASIZE PUSH2 0x181 JUMPI PUSH1 0x5 SLOAD PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x17F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x115490CC8C0E88115512115497D491529150D51151 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19B PUSH2 0x58E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1BD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x202 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x624 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x642 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH2 0x663 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x669 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x67C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x341 PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x707 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x75A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x768 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x787 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x7A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x7B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19B PUSH2 0x7C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x821 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x82B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x893 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x90C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x92F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x585 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x95A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x61A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5EF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5FD JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0x631 PUSH2 0x9C3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x9C7 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 SWAP3 ISZERO ISZERO DUP4 MUL OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0xFF SWAP2 SWAP1 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x675 DUP4 DUP4 PUSH2 0xAB3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x6D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x2320A4A61D102330B4B634B733903A37B5B2B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x6EB JUMPI POP PUSH1 0x0 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x6F6 DUP5 DUP5 DUP5 PUSH2 0xAC7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0x714 PUSH2 0x9C3 JUMP JUMPDEST DUP5 PUSH2 0x755 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x725 PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x969 JUMP JUMPDEST PUSH2 0x9C7 JUMP JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0xB49 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 SWAP3 ISZERO ISZERO DUP4 MUL OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0xFF SWAP2 SWAP1 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x61A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5EF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61A JUMP JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0xC39 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0x838 PUSH2 0x9C3 JUMP JUMPDEST DUP5 PUSH2 0x755 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x108E PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x862 PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x2320A4A61D102330B4B634B733903A37B5B2B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x902 JUMPI POP PUSH1 0x0 PUSH2 0x63C JUMP JUMPDEST PUSH2 0x675 DUP4 DUP4 PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH4 0xFF000000 NOT AND PUSH4 0x1000000 SWAP3 ISZERO ISZERO DUP4 MUL OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0xFF SWAP2 SWAP1 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x675 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xA0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x106A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFB4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0xAC0 PUSH2 0x9C3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xDCC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD4 DUP5 DUP5 DUP5 PUSH2 0xDCC JUMP JUMPDEST PUSH2 0xB3F DUP5 PUSH2 0xAE0 PUSH2 0x9C3 JUMP JUMPDEST PUSH2 0x755 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFFC PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xB1E PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xBA4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBB0 PUSH1 0x0 DUP4 DUP4 PUSH2 0xF27 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xBBD SWAP1 DUP3 PUSH2 0x969 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xBE3 SWAP1 DUP3 PUSH2 0x969 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1024 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC8A DUP3 PUSH1 0x0 DUP4 PUSH2 0xF27 JUMP JUMPDEST PUSH2 0xCC7 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF92 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0xCED SWAP1 DUP3 PUSH2 0xF2C JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xDC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD89 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD71 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDB6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1045 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE56 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF6F PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE61 DUP4 DUP4 DUP4 PUSH2 0xF27 JUMP JUMPDEST PUSH2 0xE9E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFD6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xECD SWAP1 DUP3 PUSH2 0x969 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x675 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xD35 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20627572 PUSH15 0x2066726F6D20746865207A65726F20 PUSH2 0x6464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212201686 LT RETURN MLOAD 0xA7 0xD7 0xEF PUSH23 0x909C9E325FE0179C4D1688E23B5C2BCBF1C95ADDAD35E8 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "285:2014:38:-:0;;;426:131;;;;;;;;;-1:-1:-1;2013:134:6;;;;;;;;;;;-1:-1:-1;;;2013:134:6;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2013:134:6;;;;2078:12;;2013:134;;;2078:12;;:5;;:12;:::i;:::-;-1:-1:-1;2100:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2126:9:6;:14;;-1:-1:-1;;;;2126:14:6;;;2138:2;2126:14;481:27:38::1;2126:14:6::0;481:27:38::1;::::0;;-1:-1:-1;518:32:38::1;524:10;536:13;518:5;:32::i;:::-;285:2014:::0;;7828:370:6;-1:-1:-1;;;;;7911:21:6;;7903:65;;;;;-1:-1:-1;;;7903:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7979:49;8008:1;8012:7;8021:6;7979:20;:49::i;:::-;8054:24;8071:6;8054:12;;:16;;;;;;:24;;;;:::i;:::-;8039:12;:39;-1:-1:-1;;;;;8109:18:6;;:9;:18;;;;;;;;;;;;:30;;8132:6;;8109:22;;;;;:30;;:::i;:::-;-1:-1:-1;;;;;8088:18:6;;:9;:18;;;;;;;;;;;:51;;;;8154:37;;;;;;;8088:18;;:9;;8154:37;;;;;;;;;;7828:370;;:::o;10688:92::-;;;;:::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;285:2014:38:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;285:2014:38;;;-1:-1:-1;285:2014:38;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600436106101235760003560e01c806370a08231116100a0578063a457c2d711610064578063a457c2d7146104a0578063a9059cbb146104d9578063c38b79ef14610512578063dd62ed3e1461053e578063ff0a85701461057957610181565b806370a08231146103f5578063805c44ae146104285780639299dc731461043d57806395d89b41146104525780639dc29fac1461046757610181565b806323b872dd116100e757806323b872dd146102e9578063313ce5671461032c578063395093511461035757806340c10f1914610390578063468c15a9146103c957610181565b806306fdde0314610186578063095ea7b3146102105780630cf96c3b1461025d57806318160ddd146102895780631f7fbbee146102b057610181565b36610181576005546301000000900460ff161561017f576040805162461bcd60e51b8152602060048201526015602482015274115490cc8c0e88115512115497d491529150d51151605a1b604482015290519081900360640190fd5b005b600080fd5b34801561019257600080fd5b5061019b61058e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d55781810151838201526020016101bd565b50505050905090810190601f1680156102025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021c57600080fd5b506102496004803603604081101561023357600080fd5b506001600160a01b038135169060200135610624565b604080519115158252519081900360200190f35b34801561026957600080fd5b506102496004803603602081101561028057600080fd5b50351515610642565b34801561029557600080fd5b5061029e610663565b60408051918252519081900360200190f35b3480156102bc57600080fd5b50610249600480360360408110156102d357600080fd5b506001600160a01b038135169060200135610669565b3480156102f557600080fd5b506102496004803603606081101561030c57600080fd5b506001600160a01b0381358116916020810135909116906040013561067c565b34801561033857600080fd5b506103416106fe565b6040805160ff9092168252519081900360200190f35b34801561036357600080fd5b506102496004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610707565b34801561039c57600080fd5b5061017f600480360360408110156103b357600080fd5b506001600160a01b03813516906020013561075a565b3480156103d557600080fd5b50610249600480360360208110156103ec57600080fd5b50351515610768565b34801561040157600080fd5b5061029e6004803603602081101561041857600080fd5b50356001600160a01b0316610787565b34801561043457600080fd5b506102496107a2565b34801561044957600080fd5b506102496107b2565b34801561045e57600080fd5b5061019b6107c0565b34801561047357600080fd5b5061017f6004803603604081101561048a57600080fd5b506001600160a01b038135169060200135610821565b3480156104ac57600080fd5b50610249600480360360408110156104c357600080fd5b506001600160a01b03813516906020013561082b565b3480156104e557600080fd5b50610249600480360360408110156104fc57600080fd5b506001600160a01b038135169060200135610893565b34801561051e57600080fd5b506102496004803603602081101561053557600080fd5b5035151561090c565b34801561054a57600080fd5b5061029e6004803603604081101561056157600080fd5b506001600160a01b038135811691602001351661092f565b34801561058557600080fd5b5061024961095a565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561061a5780601f106105ef5761010080835404028352916020019161061a565b820191906000526020600020905b8154815290600101906020018083116105fd57829003601f168201915b5050505050905090565b60006106386106316109c3565b84846109c7565b5060015b92915050565b6005805462ff00001916620100009215158302179081905560ff9190041690565b60025490565b60006106758383610ab3565b9392505050565b600554600090610100900460ff16156106d2576040805162461bcd60e51b81526020600482015260136024820152722320a4a61d102330b4b634b733903a37b5b2b760691b604482015290519081900360640190fd5b60055462010000900460ff16156106eb57506000610675565b6106f6848484610ac7565b949350505050565b60055460ff1690565b60006106386107146109c3565b8461075585600160006107256109c3565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610969565b6109c7565b6107648282610b49565b5050565b6005805461ff0019166101009215158302179081905560ff9190041690565b6001600160a01b031660009081526020819052604090205490565b6005546301000000900460ff1681565b600554610100900460ff1681565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561061a5780601f106105ef5761010080835404028352916020019161061a565b6107648282610c39565b60006106386108386109c3565b846107558560405180606001604052806025815260200161108e60259139600160006108626109c3565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610d35565b600554600090610100900460ff16156108e9576040805162461bcd60e51b81526020600482015260136024820152722320a4a61d102330b4b634b733903a37b5b2b760691b604482015290519081900360640190fd5b60055462010000900460ff16156109025750600061063c565b6106758383610ab3565b6005805463ff000000191663010000009215158302179081905560ff9190041690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60055462010000900460ff1681565b600082820183811015610675576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316610a0c5760405162461bcd60e51b815260040180806020018281038252602481526020018061106a6024913960400191505060405180910390fd5b6001600160a01b038216610a515760405162461bcd60e51b8152600401808060200182810382526022815260200180610fb46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610638610ac06109c3565b8484610dcc565b6000610ad4848484610dcc565b610b3f84610ae06109c3565b61075585604051806060016040528060288152602001610ffc602891396001600160a01b038a16600090815260016020526040812090610b1e6109c3565b6001600160a01b031681526020810191909152604001600020549190610d35565b5060019392505050565b6001600160a01b038216610ba4576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610bb060008383610f27565b600254610bbd9082610969565b6002556001600160a01b038216600090815260208190526040902054610be39082610969565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610c7e5760405162461bcd60e51b81526004018080602001828103825260218152602001806110246021913960400191505060405180910390fd5b610c8a82600083610f27565b610cc781604051806060016040528060228152602001610f92602291396001600160a01b0385166000908152602081905260409020549190610d35565b6001600160a01b038316600090815260208190526040902055600254610ced9082610f2c565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008184841115610dc45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d89578181015183820152602001610d71565b50505050905090810190601f168015610db65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316610e115760405162461bcd60e51b81526004018080602001828103825260258152602001806110456025913960400191505060405180910390fd5b6001600160a01b038216610e565760405162461bcd60e51b8152600401808060200182810382526023815260200180610f6f6023913960400191505060405180910390fd5b610e61838383610f27565b610e9e81604051806060016040528060268152602001610fd6602691396001600160a01b0386166000908152602081905260409020549190610d35565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610ecd9082610969565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b505050565b600061067583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d3556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220168610f351a7d7ef76909c9e325fe0179c4d1688e23b5c2bcbf1c95addad35e864736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x123 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4A0 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xC38B79EF EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x53E JUMPI DUP1 PUSH4 0xFF0A8570 EQ PUSH2 0x579 JUMPI PUSH2 0x181 JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x805C44AE EQ PUSH2 0x428 JUMPI DUP1 PUSH4 0x9299DC73 EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x452 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x467 JUMPI PUSH2 0x181 JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x32C JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x468C15A9 EQ PUSH2 0x3C9 JUMPI PUSH2 0x181 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xCF96C3B EQ PUSH2 0x25D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x1F7FBBEE EQ PUSH2 0x2B0 JUMPI PUSH2 0x181 JUMP JUMPDEST CALLDATASIZE PUSH2 0x181 JUMPI PUSH1 0x5 SLOAD PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x17F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x115490CC8C0E88115512115497D491529150D51151 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19B PUSH2 0x58E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1BD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x202 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x624 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x642 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH2 0x663 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x669 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x67C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x341 PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x707 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x75A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x768 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x787 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x7A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x7B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19B PUSH2 0x7C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x821 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x82B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x893 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x90C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x92F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x585 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x95A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x61A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5EF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5FD JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0x631 PUSH2 0x9C3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x9C7 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 SWAP3 ISZERO ISZERO DUP4 MUL OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0xFF SWAP2 SWAP1 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x675 DUP4 DUP4 PUSH2 0xAB3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x6D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x2320A4A61D102330B4B634B733903A37B5B2B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x6EB JUMPI POP PUSH1 0x0 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x6F6 DUP5 DUP5 DUP5 PUSH2 0xAC7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0x714 PUSH2 0x9C3 JUMP JUMPDEST DUP5 PUSH2 0x755 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x725 PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x969 JUMP JUMPDEST PUSH2 0x9C7 JUMP JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0xB49 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 SWAP3 ISZERO ISZERO DUP4 MUL OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0xFF SWAP2 SWAP1 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x61A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5EF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61A JUMP JUMPDEST PUSH2 0x764 DUP3 DUP3 PUSH2 0xC39 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0x838 PUSH2 0x9C3 JUMP JUMPDEST DUP5 PUSH2 0x755 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x108E PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x862 PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x2320A4A61D102330B4B634B733903A37B5B2B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x902 JUMPI POP PUSH1 0x0 PUSH2 0x63C JUMP JUMPDEST PUSH2 0x675 DUP4 DUP4 PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH4 0xFF000000 NOT AND PUSH4 0x1000000 SWAP3 ISZERO ISZERO DUP4 MUL OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0xFF SWAP2 SWAP1 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x675 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xA0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x106A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xFB4 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x638 PUSH2 0xAC0 PUSH2 0x9C3 JUMP JUMPDEST DUP5 DUP5 PUSH2 0xDCC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD4 DUP5 DUP5 DUP5 PUSH2 0xDCC JUMP JUMPDEST PUSH2 0xB3F DUP5 PUSH2 0xAE0 PUSH2 0x9C3 JUMP JUMPDEST PUSH2 0x755 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFFC PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xB1E PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xBA4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBB0 PUSH1 0x0 DUP4 DUP4 PUSH2 0xF27 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xBBD SWAP1 DUP3 PUSH2 0x969 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xBE3 SWAP1 DUP3 PUSH2 0x969 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1024 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC8A DUP3 PUSH1 0x0 DUP4 PUSH2 0xF27 JUMP JUMPDEST PUSH2 0xCC7 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF92 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0xCED SWAP1 DUP3 PUSH2 0xF2C JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xDC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD89 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD71 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDB6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1045 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE56 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF6F PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE61 DUP4 DUP4 DUP4 PUSH2 0xF27 JUMP JUMPDEST PUSH2 0xE9E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFD6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xECD SWAP1 DUP3 PUSH2 0x969 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x675 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0xD35 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20627572 PUSH15 0x2066726F6D20746865207A65726F20 PUSH2 0x6464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x73582212201686 LT RETURN MLOAD 0xA7 0xD7 0xEF PUSH23 0x909C9E325FE0179C4D1688E23B5C2BCBF1C95ADDAD35E8 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "285:2014:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;604:11;;;;;;;600:73;;;631:31;;;-1:-1:-1;;;631:31:38;;;;;;;;;;;;-1:-1:-1;;;631:31:38;;;;;;;;;;;;;;600:73;285:2014;;;;;2212:81:6;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4248:166;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4248:166:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1796:191:38;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1796:191:38;;;;:::i;3255:98:6:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2135:162:38;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2135:162:38;;;;;;;;:::i;1221:362::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1221:362:38;;;;;;;;;;;;;;;;;:::i;3114:81:6:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5586:215;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5586:215:6;;;;;;;;:::i;685:95:38:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;685:95:38;;;;;;;;:::i;1589:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1589:201:38;;;;:::i;3411:117:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3411:117:6;-1:-1:-1;;;;;3411:117:6;;:::i;396:23:38:-;;;;;;;;;;;;;:::i;322:32::-;;;;;;;;;;;;;:::i;2406:85:6:-;;;;;;;;;;;;;:::i;786:95:38:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;786:95:38;;;;;;;;:::i;6288:266:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6288:266:6;;;;;;;;:::i;887:328:38:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;887:328:38;;;;;;;;:::i;1993:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1993:136:38;;;;:::i;3961:149:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3961:149:6;;;;;;;;;;:::i;360:30:38:-;;;;;;;;;;;;;:::i;2212:81:6:-;2281:5;2274:12;;;;;;;;-1:-1:-1;;2274:12:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2249:13;;2274:12;;2281:5;;2274:12;;2281:5;2274:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81;:::o;4248:166::-;4331:4;4347:39;4356:12;:10;:12::i;:::-;4370:7;4379:6;4347:8;:39::i;:::-;-1:-1:-1;4403:4:6;4248:166;;;;;:::o;1796:191:38:-;1905:18;:40;;-1:-1:-1;;1905:40:38;;;;;;;;;;;;;1962:18;;;;;1796:191::o;3255:98:6:-;3334:12;;3255:98;:::o;2135:162:38:-;2230:4;2257:33;2272:9;2283:6;2257:14;:33::i;:::-;2250:40;2135:162;-1:-1:-1;;;2135:162:38:o;1221:362::-;1369:20;;1349:4;;1369:20;;;;;1365:80;;;1405:29;;;-1:-1:-1;;;1405:29:38;;;;;;;;;;;;-1:-1:-1;;;1405:29:38;;;;;;;;;;;;;;1365:80;1458:18;;;;;;;1454:61;;;-1:-1:-1;1499:5:38;1492:12;;1454:61;1531:45;1550:6;1558:9;1569:6;1531:18;:45::i;:::-;1524:52;1221:362;-1:-1:-1;;;;1221:362:38:o;3114:81:6:-;3179:9;;;;3114:81;:::o;5586:215::-;5674:4;5690:83;5699:12;:10;:12::i;:::-;5713:7;5722:50;5761:10;5722:11;:25;5734:12;:10;:12::i;:::-;-1:-1:-1;;;;;5722:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;5722:25:6;;;:34;;;;;;;;;;;:38;:50::i;:::-;5690:8;:83::i;685:95:38:-;751:22;757:7;766:6;751:5;:22::i;:::-;685:95;;:::o;1589:201::-;1702:20;:44;;-1:-1:-1;;1702:44:38;;;;;;;;;;;;;1763:20;;;;;1589:201::o;3411:117:6:-;-1:-1:-1;;;;;3503:18:6;3477:7;3503:18;;;;;;;;;;;;3411:117::o;396:23:38:-;;;;;;;;;:::o;322:32::-;;;;;;;;;:::o;2406:85:6:-;2477:7;2470:14;;;;;;;;-1:-1:-1;;2470:14:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2445:13;;2470:14;;2477:7;;2470:14;;2477:7;2470:14;;;;;;;;;;;;;;;;;;;;;;;;786:95:38;852:22;858:7;867:6;852:5;:22::i;6288:266:6:-;6381:4;6397:129;6406:12;:10;:12::i;:::-;6420:7;6429:96;6468:15;6429:96;;;;;;;;;;;;;;;;;:11;:25;6441:12;:10;:12::i;:::-;-1:-1:-1;;;;;6429:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;6429:25:6;;;:34;;;;;;;;;;;:96;:38;:96::i;887:328:38:-;1013:20;;989:4;;1013:20;;;;;1009:80;;;1049:29;;;-1:-1:-1;;;1049:29:38;;;;;;;;;;;;-1:-1:-1;;;1049:29:38;;;;;;;;;;;;;;1009:80;1102:18;;;;;;;1098:61;;;-1:-1:-1;1143:5:38;1136:12;;1098:61;1175:33;1190:9;1201:6;1175:14;:33::i;1993:136::-;2068:11;:26;;-1:-1:-1;;2068:26:38;;;;;;;;;;;;;2111:11;;;;;1993:136::o;3961:149:6:-;-1:-1:-1;;;;;4076:18:6;;;4050:7;4076:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3961:149::o;360:30:38:-;;;;;;;;;:::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;590:104:0;677:10;590:104;:::o;9350:340:6:-;-1:-1:-1;;;;;9451:19:6;;9443:68;;;;-1:-1:-1;;;9443:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9529:21:6;;9521:68;;;;-1:-1:-1;;;9521:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9600:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9651:32;;;;;;;;;;;;;;;;;9350:340;;;:::o;3731:172::-;3817:4;3833:42;3843:12;:10;:12::i;:::-;3857:9;3868:6;3833:9;:42::i;4874:317::-;4980:4;4996:36;5006:6;5014:9;5025:6;4996:9;:36::i;:::-;5042:121;5051:6;5059:12;:10;:12::i;:::-;5073:89;5111:6;5073:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5073:19:6;;;;;;:11;:19;;;;;;5093:12;:10;:12::i;:::-;-1:-1:-1;;;;;5073:33:6;;;;;;;;;;;;-1:-1:-1;5073:33:6;;;:89;:37;:89::i;5042:121::-;-1:-1:-1;5180:4:6;4874:317;;;;;:::o;7828:370::-;-1:-1:-1;;;;;7911:21:6;;7903:65;;;;;-1:-1:-1;;;7903:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7979:49;8008:1;8012:7;8021:6;7979:20;:49::i;:::-;8054:12;;:24;;8071:6;8054:16;:24::i;:::-;8039:12;:39;-1:-1:-1;;;;;8109:18:6;;:9;:18;;;;;;;;;;;:30;;8132:6;8109:22;:30::i;:::-;-1:-1:-1;;;;;8088:18:6;;:9;:18;;;;;;;;;;;:51;;;;8154:37;;;;;;;8088:18;;:9;;8154:37;;;;;;;;;;7828:370;;:::o;8517:410::-;-1:-1:-1;;;;;8600:21:6;;8592:67;;;;-1:-1:-1;;;8592:67:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8670:49;8691:7;8708:1;8712:6;8670:20;:49::i;:::-;8751:68;8774:6;8751:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8751:18:6;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;8730:18:6;;:9;:18;;;;;;;;;;:89;8844:12;;:24;;8861:6;8844:16;:24::i;:::-;8829:12;:39;8883:37;;;;;;;;8909:1;;-1:-1:-1;;;;;8883:37:6;;;;;;;;;;;;8517:410;;:::o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:5;;;1746:187::o;7028:530:6:-;-1:-1:-1;;;;;7133:20:6;;7125:70;;;;-1:-1:-1;;;7125:70:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7213:23:6;;7205:71;;;;-1:-1:-1;;;7205:71:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7287:47;7308:6;7316:9;7327:6;7287:20;:47::i;:::-;7365:71;7387:6;7365:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7365:17:6;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7345:17:6;;;:9;:17;;;;;;;;;;;:91;;;;7469:20;;;;;;;:32;;7494:6;7469:24;:32::i;:::-;-1:-1:-1;;;;;7446:20:6;;;:9;:20;;;;;;;;;;;;:55;;;;7516:35;;;;;;;7446:20;;7516:35;;;;;;;;;;;;;7028:530;;;:::o;10688:92::-;;;;:::o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "865600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "1338",
                "approve(address,uint256)": "infinite",
                "balanceOf(address)": "1168",
                "burn(address,uint256)": "infinite",
                "decimals()": "1058",
                "decreaseAllowance(address,uint256)": "infinite",
                "increaseAllowance(address,uint256)": "infinite",
                "mint(address,uint256)": "infinite",
                "name()": "infinite",
                "rejectEther()": "1066",
                "setRejectEther(bool)": "21179",
                "setTransferShouldFail(bool)": "21181",
                "setTransferShouldRevert(bool)": "21224",
                "succeedingTransfer(address,uint256)": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "1088",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite",
                "transferShouldFail()": "1131",
                "transferShouldRevert()": "1088"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(address,uint256)": "9dc29fac",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "mint(address,uint256)": "40c10f19",
              "name()": "06fdde03",
              "rejectEther()": "805c44ae",
              "setRejectEther(bool)": "c38b79ef",
              "setTransferShouldFail(bool)": "0cf96c3b",
              "setTransferShouldRevert(bool)": "468c15a9",
              "succeedingTransfer(address,uint256)": "1f7fbbee",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferShouldFail()": "ff0a8570",
              "transferShouldRevert()": "9299dc73"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rejectEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_rejectEther\",\"type\":\"bool\"}],\"name\":\"setRejectEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_transferShouldFail\",\"type\":\"bool\"}],\"name\":\"setTransferShouldFail\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_transferShouldRevert\",\"type\":\"bool\"}],\"name\":\"setTransferShouldRevert\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"succeedingTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferShouldFail\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferShouldRevert\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/FailingToken.sol\":\"FailingToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../../GSN/Context.sol\\\";\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n    using SafeMath for uint256;\\n    using Address for address;\\n\\n    mapping (address => uint256) private _balances;\\n\\n    mapping (address => mapping (address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n    uint8 private _decimals;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n     * a default value of 18.\\n     *\\n     * To select a different value for {decimals}, use {_setupDecimals}.\\n     *\\n     * All three of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor (string memory name, string memory symbol) {\\n        _name = name;\\n        _symbol = symbol;\\n        _decimals = 18;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n     * called.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20};\\n     *\\n     * Requirements:\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\\n     *\\n     * This is internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        _balances[sender] = _balances[sender].sub(amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        _balances[recipient] = _balances[recipient].add(amount);\\n        emit Transfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `to` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply = _totalSupply.add(amount);\\n        _balances[account] = _balances[account].add(amount);\\n        emit Transfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        _balances[account] = _balances[account].sub(amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        _totalSupply = _totalSupply.sub(amount);\\n        emit Transfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Sets {decimals} to a value other than the default one of 18.\\n     *\\n     * WARNING: This function should only be called from the constructor. Most\\n     * applications that interact with token contracts will not expect\\n     * {decimals} to ever change, and may work incorrectly if it does.\\n     */\\n    function _setupDecimals(uint8 decimals_) internal {\\n        _decimals = decimals_;\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be to transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\\n}\\n\",\"keccak256\":\"0xf1ac0ee2ca2b36f90574d3b2b37422ced4fa829741d80794c62f5958a2d8f474\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/testing/FailingToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.1;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\n/* This token is ONLY useful for testing\\n * Anybody can mint as many tokens as they like\\n * Anybody can burn anyone else's tokens\\n * Will fail to transfer ANY tokens\\n */\\ncontract FailingToken is ERC20 {\\n    bool public transferShouldRevert;\\n    bool public transferShouldFail;\\n    bool public rejectEther;\\n\\n    constructor() ERC20(\\\"Failing Token\\\", \\\"FAIL\\\") {\\n        transferShouldRevert = true;\\n        _mint(msg.sender, 1000000 ether);\\n    }\\n\\n    receive() external payable {\\n        if (rejectEther) {\\n            revert(\\\"ERC20: ETHER_REJECTED\\\");\\n        }\\n    }\\n\\n    function mint(address account, uint256 amount) external {\\n        _mint(account, amount);\\n    }\\n\\n    function burn(address account, uint256 amount) external {\\n        _burn(account, amount);\\n    }\\n\\n    function transfer(address recipient, uint256 amount)\\n        public\\n        override\\n        returns (bool)\\n    {\\n        if (transferShouldRevert) {\\n            revert(\\\"FAIL: Failing token\\\");\\n        }\\n        if (transferShouldFail) {\\n            return false;\\n        }\\n        return super.transfer(recipient, amount);\\n    }\\n\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public override returns (bool) {\\n        if (transferShouldRevert) {\\n            revert(\\\"FAIL: Failing token\\\");\\n        }\\n        if (transferShouldFail) {\\n            return false;\\n        }\\n        return super.transferFrom(sender, recipient, amount);\\n    }\\n\\n    function setTransferShouldRevert(bool _transferShouldRevert)\\n        public\\n        returns (bool)\\n    {\\n        transferShouldRevert = _transferShouldRevert;\\n        return transferShouldRevert;\\n    }\\n\\n    function setTransferShouldFail(bool _transferShouldFail)\\n        public\\n        returns (bool)\\n    {\\n        transferShouldFail = _transferShouldFail;\\n        return transferShouldFail;\\n    }\\n\\n    function setRejectEther(bool _rejectEther) public returns (bool) {\\n        rejectEther = _rejectEther;\\n        return rejectEther;\\n    }\\n\\n    function succeedingTransfer(address recipient, uint256 amount)\\n        public\\n        returns (bool)\\n    {\\n        return super.transfer(recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x3810561db188c3d19519d0e001b1a1caf81d8762d6012f9597818e919bd0216e\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 590,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 596,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 598,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 600,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 602,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              },
              {
                "astId": 604,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "_decimals",
                "offset": 0,
                "slot": "5",
                "type": "t_uint8"
              },
              {
                "astId": 4793,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "transferShouldRevert",
                "offset": 1,
                "slot": "5",
                "type": "t_bool"
              },
              {
                "astId": 4795,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "transferShouldFail",
                "offset": 2,
                "slot": "5",
                "type": "t_bool"
              },
              {
                "astId": 4797,
                "contract": "src.sol/testing/FailingToken.sol:FailingToken",
                "label": "rejectEther",
                "offset": 3,
                "slot": "5",
                "type": "t_bool"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint8": {
                "encoding": "inplace",
                "label": "uint8",
                "numberOfBytes": "1"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/testing/NonconformingToken.sol": {
        "NonconformingToken": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "Approval(address,address,uint256)": {
                "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
              },
              "Transfer(address,address,uint256)": {
                "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
              }
            },
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "constructor": {
                "details": "Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b506040805180820190915260138082527f4e6f6e636f6e666f726d696e6720546f6b656e000000000000000000000000006020909201918252620000589160039162000224565b50604080518082019091526004808252631554d11560e21b602090920191825262000084918162000224565b506005805460ff19166012179055620000a83369d3c21bcecceda1000000620000ae565b620002c0565b6001600160a01b0382166200010a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200011860008383620001bd565b6200013481600254620001c260201b620005a31790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000167918390620005a3620001c2821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b6000828201838110156200021d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026757805160ff191683800117855562000297565b8280016001018555821562000297579182015b82811115620002975782518255916020019190600101906200027a565b50620002a5929150620002a9565b5090565b5b80821115620002a55760008155600101620002aa565b610c8a80620002d06000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac14610287578063a457c2d7146102b3578063a9059cbb146102df578063dd62ed3e1461030b576100cf565b806340c10f191461022d57806370a082311461025957806395d89b411461027f576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461017f57806323b872dd14610199578063313ce567146101cf57806339509351146101ed575b600080fd5b6100dc610339565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b0381351690602001356103cf565b005b6101876103de565b60408051918252519081900360200190f35b61017d600480360360608110156101af57600080fd5b506001600160a01b038135811691602081013590911690604001356103e4565b6101d7610446565b6040805160ff9092168252519081900360200190f35b6102196004803603604081101561020357600080fd5b506001600160a01b03813516906020013561044f565b604080519115158252519081900360200190f35b61017d6004803603604081101561024357600080fd5b506001600160a01b03813516906020013561048e565b6101876004803603602081101561026f57600080fd5b50356001600160a01b0316610498565b6100dc6104b3565b61017d6004803603604081101561029d57600080fd5b506001600160a01b038135169060200135610514565b610219600480360360408110156102c957600080fd5b506001600160a01b03813516906020013561051e565b61017d600480360360408110156102f557600080fd5b506001600160a01b03813516906020013561056d565b6101876004803603604081101561032157600080fd5b506001600160a01b0381358116916020013516610578565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b820191906000526020600020905b8154815290600101906020018083116103a857829003601f168201915b5050505050905090565b6103da338383610604565b5050565b60025490565b6103ef8383836106f0565b610441833361043c84604051806060016040528060288152602001610b9e602891396001600160a01b0389166000908152600160209081526040808320338452909152902054919061084b565b610604565b505050565b60055460ff1690565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161048591859061043c90866105a3565b50600192915050565b6103da82826108e2565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b6103da82826109d2565b6000610485338461043c85604051806060016040528060258152602001610c30602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061084b565b6103da3383836106f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000828201838110156105fd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0383166106495760405162461bcd60e51b8152600401808060200182810382526024815260200180610c0c6024913960400191505060405180910390fd5b6001600160a01b03821661068e5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b566022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107355760405162461bcd60e51b8152600401808060200182810382526025815260200180610be76025913960400191505060405180910390fd5b6001600160a01b03821661077a5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b116023913960400191505060405180910390fd5b610785838383610441565b6107c281604051806060016040528060268152602001610b78602691396001600160a01b038616600090815260208190526040902054919061084b565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546107f190826105a3565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156108da5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561089f578181015183820152602001610887565b50505050905090810190601f1680156108cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03821661093d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61094960008383610441565b60025461095690826105a3565b6002556001600160a01b03821660009081526020819052604090205461097c90826105a3565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610a175760405162461bcd60e51b8152600401808060200182810382526021815260200180610bc66021913960400191505060405180910390fd5b610a2382600083610441565b610a6081604051806060016040528060228152602001610b34602291396001600160a01b038516600090815260208190526040902054919061084b565b6001600160a01b038316600090815260208190526040902055600254610a869082610ace565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006105fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061084b56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e6487dc3cebf5089855833203963e70329738e4c7cc3926c98725c5550447e3264736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x13 DUP1 DUP3 MSTORE PUSH32 0x4E6F6E636F6E666F726D696E6720546F6B656E00000000000000000000000000 PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH3 0x58 SWAP2 PUSH1 0x3 SWAP2 PUSH3 0x224 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0x1554D115 PUSH1 0xE2 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH3 0x84 SWAP2 DUP2 PUSH3 0x224 JUMP JUMPDEST POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE PUSH3 0xA8 CALLER PUSH10 0xD3C21BCECCEDA1000000 PUSH3 0xAE JUMP JUMPDEST PUSH3 0x2C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x10A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH3 0x118 PUSH1 0x0 DUP4 DUP4 PUSH3 0x1BD JUMP JUMPDEST PUSH3 0x134 DUP2 PUSH1 0x2 SLOAD PUSH3 0x1C2 PUSH1 0x20 SHL PUSH3 0x5A3 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH3 0x167 SWAP2 DUP4 SWAP1 PUSH3 0x5A3 PUSH3 0x1C2 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH3 0x21D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x267 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x297 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x297 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x297 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x27A JUMP JUMPDEST POP PUSH3 0x2A5 SWAP3 SWAP2 POP PUSH3 0x2A9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2A5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2AA JUMP JUMPDEST PUSH2 0xC8A DUP1 PUSH3 0x2D0 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x9DC29FAC GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30B JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1ED JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3CF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x187 PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3E4 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x446 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x219 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x48E JUMP JUMPDEST PUSH2 0x187 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x498 JUMP JUMPDEST PUSH2 0xDC PUSH2 0x4B3 JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x514 JUMP JUMPDEST PUSH2 0x219 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x51E JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x56D JUMP JUMPDEST PUSH2 0x187 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x578 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x3DA CALLER DUP4 DUP4 PUSH2 0x604 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3EF DUP4 DUP4 DUP4 PUSH2 0x6F0 JUMP JUMPDEST PUSH2 0x441 DUP4 CALLER PUSH2 0x43C DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB9E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x604 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x485 SWAP2 DUP6 SWAP1 PUSH2 0x43C SWAP1 DUP7 PUSH2 0x5A3 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3DA DUP3 DUP3 PUSH2 0x8E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x3DA DUP3 DUP3 PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x485 CALLER DUP5 PUSH2 0x43C DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC30 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x3DA CALLER DUP4 DUP4 PUSH2 0x6F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x649 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC0C PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x68E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB56 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x735 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xBE7 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x77A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB11 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x785 DUP4 DUP4 DUP4 PUSH2 0x441 JUMP JUMPDEST PUSH2 0x7C2 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB78 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x7F1 SWAP1 DUP3 PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x8DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x89F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x887 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8CC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x93D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x949 PUSH1 0x0 DUP4 DUP4 PUSH2 0x441 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x956 SWAP1 DUP3 PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x97C SWAP1 DUP3 PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA17 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xBC6 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA23 DUP3 PUSH1 0x0 DUP4 PUSH2 0x441 JUMP JUMPDEST PUSH2 0xA60 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB34 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0xA86 SWAP1 DUP3 PUSH2 0xACE JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x84B JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20627572 PUSH15 0x2066726F6D20746865207A65726F20 PUSH2 0x6464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220E648 PUSH30 0xC3CEBF5089855833203963E70329738E4C7CC3926C98725C5550447E3264 PUSH20 0x6F6C634300070100330000000000000000000000 ",
              "sourceMap": "438:10465:39:-:0;;;1574:152;;;;;;;;;-1:-1:-1;1598:29:39;;;;;;;;;;;;;;;;;;;;;;;:5;;:29;:::i;:::-;-1:-1:-1;1637:16:39;;;;;;;;;;;;;-1:-1:-1;;;1637:16:39;;;;;;;;;;;:::i;:::-;-1:-1:-1;1663:9:39;:14;;-1:-1:-1;;1663:14:39;1675:2;1663:14;;;1687:32;1693:10;1705:13;1687:5;:32::i;:::-;438:10465;;7653:370;-1:-1:-1;;;;;7736:21:39;;7728:65;;;;;-1:-1:-1;;;7728:65:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;7804:49;7833:1;7837:7;7846:6;7804:20;:49::i;:::-;7879:24;7896:6;7879:12;;:16;;;;;;:24;;;;:::i;:::-;7864:12;:39;-1:-1:-1;;;;;7934:18:39;;:9;:18;;;;;;;;;;;;:30;;7957:6;;7934:22;;;;;:30;;:::i;:::-;-1:-1:-1;;;;;7913:18:39;;:9;:18;;;;;;;;;;;:51;;;;7979:37;;;;;;;7913:18;;:9;;7979:37;;;;;;;;;;7653:370;;:::o;10578:121::-;;;;:::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;438:10465:39:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;438:10465:39;;;-1:-1:-1;438:10465:39;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac14610287578063a457c2d7146102b3578063a9059cbb146102df578063dd62ed3e1461030b576100cf565b806340c10f191461022d57806370a082311461025957806395d89b411461027f576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461017f57806323b872dd14610199578063313ce567146101cf57806339509351146101ed575b600080fd5b6100dc610339565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b0381351690602001356103cf565b005b6101876103de565b60408051918252519081900360200190f35b61017d600480360360608110156101af57600080fd5b506001600160a01b038135811691602081013590911690604001356103e4565b6101d7610446565b6040805160ff9092168252519081900360200190f35b6102196004803603604081101561020357600080fd5b506001600160a01b03813516906020013561044f565b604080519115158252519081900360200190f35b61017d6004803603604081101561024357600080fd5b506001600160a01b03813516906020013561048e565b6101876004803603602081101561026f57600080fd5b50356001600160a01b0316610498565b6100dc6104b3565b61017d6004803603604081101561029d57600080fd5b506001600160a01b038135169060200135610514565b610219600480360360408110156102c957600080fd5b506001600160a01b03813516906020013561051e565b61017d600480360360408110156102f557600080fd5b506001600160a01b03813516906020013561056d565b6101876004803603604081101561032157600080fd5b506001600160a01b0381358116916020013516610578565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b820191906000526020600020905b8154815290600101906020018083116103a857829003601f168201915b5050505050905090565b6103da338383610604565b5050565b60025490565b6103ef8383836106f0565b610441833361043c84604051806060016040528060288152602001610b9e602891396001600160a01b0389166000908152600160209081526040808320338452909152902054919061084b565b610604565b505050565b60055460ff1690565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161048591859061043c90866105a3565b50600192915050565b6103da82826108e2565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b6103da82826109d2565b6000610485338461043c85604051806060016040528060258152602001610c30602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061084b565b6103da3383836106f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000828201838110156105fd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0383166106495760405162461bcd60e51b8152600401808060200182810382526024815260200180610c0c6024913960400191505060405180910390fd5b6001600160a01b03821661068e5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b566022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107355760405162461bcd60e51b8152600401808060200182810382526025815260200180610be76025913960400191505060405180910390fd5b6001600160a01b03821661077a5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b116023913960400191505060405180910390fd5b610785838383610441565b6107c281604051806060016040528060268152602001610b78602691396001600160a01b038616600090815260208190526040902054919061084b565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546107f190826105a3565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156108da5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561089f578181015183820152602001610887565b50505050905090810190601f1680156108cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03821661093d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61094960008383610441565b60025461095690826105a3565b6002556001600160a01b03821660009081526020819052604090205461097c90826105a3565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610a175760405162461bcd60e51b8152600401808060200182810382526021815260200180610bc66021913960400191505060405180910390fd5b610a2382600083610441565b610a6081604051806060016040528060228152602001610b34602291396001600160a01b038516600090815260208190526040902054919061084b565b6001600160a01b038316600090815260208190526040902055600254610a869082610ace565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006105fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061084b56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e6487dc3cebf5089855833203963e70329738e4c7cc3926c98725c5550447e3264736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x9DC29FAC GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30B JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1ED JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3CF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x187 PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3E4 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x446 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x219 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x48E JUMP JUMPDEST PUSH2 0x187 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x498 JUMP JUMPDEST PUSH2 0xDC PUSH2 0x4B3 JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x514 JUMP JUMPDEST PUSH2 0x219 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x51E JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x56D JUMP JUMPDEST PUSH2 0x187 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x578 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x3DA CALLER DUP4 DUP4 PUSH2 0x604 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3EF DUP4 DUP4 DUP4 PUSH2 0x6F0 JUMP JUMPDEST PUSH2 0x441 DUP4 CALLER PUSH2 0x43C DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB9E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x604 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x485 SWAP2 DUP6 SWAP1 PUSH2 0x43C SWAP1 DUP7 PUSH2 0x5A3 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3DA DUP3 DUP3 PUSH2 0x8E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x3DA DUP3 DUP3 PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x485 CALLER DUP5 PUSH2 0x43C DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC30 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x3DA CALLER DUP4 DUP4 PUSH2 0x6F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x649 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC0C PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x68E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB56 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x735 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xBE7 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x77A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB11 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x785 DUP4 DUP4 DUP4 PUSH2 0x441 JUMP JUMPDEST PUSH2 0x7C2 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB78 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x7F1 SWAP1 DUP3 PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x8DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x89F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x887 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8CC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x93D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x949 PUSH1 0x0 DUP4 DUP4 PUSH2 0x441 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x956 SWAP1 DUP3 PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x97C SWAP1 DUP3 PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA17 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xBC6 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA23 DUP3 PUSH1 0x0 DUP4 PUSH2 0x441 JUMP JUMPDEST PUSH2 0xA60 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB34 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x84B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0xA86 SWAP1 DUP3 PUSH2 0xACE JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FD DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x84B JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20627572 PUSH15 0x2066726F6D20746865207A65726F20 PUSH2 0x6464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220E648 PUSH30 0xC3CEBF5089855833203963E70329738E4C7CC3926C98725C5550447E3264 PUSH20 0x6F6C634300070100330000000000000000000000 ",
              "sourceMap": "438:10465:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1791:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3789:119;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3789:119:39;;;;;;;;:::i;:::-;;2834:89;;;:::i;:::-;;;;;;;;;;;;;;;;4375:390;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4375:390:39;;;;;;;;;;;;;;;;;:::i;2693:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5160:285;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5160:285:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10705:95;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10705:95:39;;;;;;;;:::i;2981:108::-;;;;;;;;;;;;;;;;-1:-1:-1;2981:108:39;-1:-1:-1;;;;;2981:108:39;;:::i;1985:85::-;;;:::i;10806:95::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10806:95:39;;;;;;;;:::i;5932:382::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5932:382:39;;;;;;;;:::i;3292:125::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3292:125:39;;;;;;;;:::i;3475:176::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3475:176:39;;;;;;;;;;:::i;1791:81::-;1860:5;1853:12;;;;;;;;-1:-1:-1;;1853:12:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:13;;1853:12;;1860:5;;1853:12;;1860:5;1853:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1791:81;:::o;3789:119::-;3864:37;3873:10;3885:7;3894:6;3864:8;:37::i;:::-;3789:119;;:::o;2834:89::-;2904:12;;2834:89;:::o;4375:390::-;4503:36;4513:6;4521:9;4532:6;4503:9;:36::i;:::-;4549:209;4571:6;4591:10;4615:133;4668:6;4615:133;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4615:19:39;;;;;;:11;:19;;;;;;;;4635:10;4615:31;;;;;;;;;:133;:35;:133::i;:::-;4549:8;:209::i;:::-;4375:390;;;:::o;2693:81::-;2758:9;;;;2693:81;:::o;5160:285::-;5314:10;5272:4;5359:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5359:32:39;;;;;;;;;;5272:4;;5292:125;;5338:7;;5359:48;;5396:10;5359:36;:48::i;5292:125::-;-1:-1:-1;5434:4:39;5160:285;;;;:::o;10705:95::-;10771:22;10777:7;10786:6;10771:5;:22::i;2981:108::-;-1:-1:-1;;;;;3064:18:39;3038:7;3064:18;;;;;;;;;;;;2981:108::o;1985:85::-;2056:7;2049:14;;;;;;;;-1:-1:-1;;2049:14:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:13;;2049:14;;2056:7;;2049:14;;2056:7;2049:14;;;;;;;;;;;;;;;;;;;;;;;;10806:95;10872:22;10878:7;10887:6;10872:5;:22::i;5932:382::-;6049:4;6069:217;6091:10;6115:7;6136:140;6190:15;6136:140;;;;;;;;;;;;;;;;;6148:10;6136:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6136:32:39;;;;;;;;;;;:140;:36;:140::i;3292:125::-;3370:40;3380:10;3392:9;3403:6;3370:9;:40::i;3475:176::-;-1:-1:-1;;;;;3617:18:39;;;3587:7;3617:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3475:176::o;874::5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;9210:370:39:-;-1:-1:-1;;;;;9341:19:39;;9333:68;;;;-1:-1:-1;;;9333:68:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9419:21:39;;9411:68;;;;-1:-1:-1;;;9411:68:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9490:18:39;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9541:32;;;;;;;;;;;;;;;;;9210:370;;;:::o;6788:594::-;-1:-1:-1;;;;;6923:20:39;;6915:70;;;;-1:-1:-1;;;6915:70:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7003:23:39;;6995:71;;;;-1:-1:-1;;;6995:71:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7077:47;7098:6;7106:9;7117:6;7077:20;:47::i;:::-;7155:105;7190:6;7155:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7155:17:39;;:9;:17;;;;;;;;;;;;:105;:21;:105::i;:::-;-1:-1:-1;;;;;7135:17:39;;;:9;:17;;;;;;;;;;;:125;;;;7293:20;;;;;;;:32;;7318:6;7293:24;:32::i;:::-;-1:-1:-1;;;;;7270:20:39;;;:9;:20;;;;;;;;;;;;:55;;;;7340:35;;;;;;;7270:20;;7340:35;;;;;;;;;;;;;6788:594;;;:::o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:5;;;1746:187::o;7653:370:39:-;-1:-1:-1;;;;;7736:21:39;;7728:65;;;;;-1:-1:-1;;;7728:65:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;7804:49;7833:1;7837:7;7846:6;7804:20;:49::i;:::-;7879:12;;:24;;7896:6;7879:16;:24::i;:::-;7864:12;:39;-1:-1:-1;;;;;7934:18:39;;:9;:18;;;;;;;;;;;:30;;7957:6;7934:22;:30::i;:::-;-1:-1:-1;;;;;7913:18:39;;:9;:18;;;;;;;;;;;:51;;;;7979:37;;;;;;;7913:18;;:9;;7979:37;;;;;;;;;;7653:370;;:::o;8343:444::-;-1:-1:-1;;;;;8426:21:39;;8418:67;;;;-1:-1:-1;;;8418:67:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8496:49;8517:7;8534:1;8538:6;8496:20;:49::i;:::-;8577:102;8613:6;8577:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8577:18:39;;:9;:18;;;;;;;;;;;;:102;:22;:102::i;:::-;-1:-1:-1;;;;;8556:18:39;;:9;:18;;;;;;;;;;:123;8704:12;;:24;;8721:6;8704:16;:24::i;:::-;8689:12;:39;8743:37;;;;;;;;8769:1;;-1:-1:-1;;;;;8743:37:39;;;;;;;;;;;;8343:444;;:::o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "642000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "1338",
                "approve(address,uint256)": "infinite",
                "balanceOf(address)": "1190",
                "burn(address,uint256)": "infinite",
                "decimals()": "1102",
                "decreaseAllowance(address,uint256)": "infinite",
                "increaseAllowance(address,uint256)": "infinite",
                "mint(address,uint256)": "infinite",
                "name()": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "1043",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite"
              },
              "internal": {
                "_approve(address,address,uint256)": "infinite",
                "_beforeTokenTransfer(address,address,uint256)": "infinite",
                "_burn(address,uint256)": "infinite",
                "_mint(address,uint256)": "infinite",
                "_setupDecimals(uint8)": "infinite",
                "_transfer(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(address,uint256)": "9dc29fac",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "mint(address,uint256)": "40c10f19",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/NonconformingToken.sol\":\"NonconformingToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"src.sol/testing/NonconformingToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.1;\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\n/* This token is ONLY useful for testing\\n * Anybody can mint as many tokens as they like\\n * Anybody can burn anyone else's tokens\\n * It is intentionally not compliant to the ERC20 standard,\\n * i.e. returns nothing instead of `true` for\\n * several functions.\\n * Based on OpenZeppelin's (standard-conforming) implementation.\\n */\\ncontract NonconformingToken {\\n    using SafeMath for uint256;\\n\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n    uint8 private _decimals;\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(\\n        address indexed owner,\\n        address indexed spender,\\n        uint256 value\\n    );\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n     * a default value of 18.\\n     *\\n     * To select a different value for {decimals}, use {_setupDecimals}.\\n     *\\n     * All three of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor() {\\n        _name = \\\"Nonconforming Token\\\";\\n        _symbol = \\\"USDT\\\";\\n        _decimals = 18;\\n        _mint(msg.sender, 1000000 ether);\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n     * called.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual {\\n        _transfer(msg.sender, recipient, amount);\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender)\\n        public\\n        view\\n        virtual\\n        returns (uint256)\\n    {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual {\\n        _approve(msg.sender, spender, amount);\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public virtual {\\n        _transfer(sender, recipient, amount);\\n        _approve(\\n            sender,\\n            msg.sender,\\n            _allowances[sender][msg.sender].sub(\\n                amount,\\n                \\\"ERC20: transfer amount exceeds allowance\\\"\\n            )\\n        );\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue)\\n        public\\n        virtual\\n        returns (bool)\\n    {\\n        _approve(\\n            msg.sender,\\n            spender,\\n            _allowances[msg.sender][spender].add(addedValue)\\n        );\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue)\\n        public\\n        virtual\\n        returns (bool)\\n    {\\n        _approve(\\n            msg.sender,\\n            spender,\\n            _allowances[msg.sender][spender].sub(\\n                subtractedValue,\\n                \\\"ERC20: decreased allowance below zero\\\"\\n            )\\n        );\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\\n     *\\n     * This is internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        _balances[sender] = _balances[sender].sub(\\n            amount,\\n            \\\"ERC20: transfer amount exceeds balance\\\"\\n        );\\n        _balances[recipient] = _balances[recipient].add(amount);\\n        emit Transfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply = _totalSupply.add(amount);\\n        _balances[account] = _balances[account].add(amount);\\n        emit Transfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        _balances[account] = _balances[account].sub(\\n            amount,\\n            \\\"ERC20: burn amount exceeds balance\\\"\\n        );\\n        _totalSupply = _totalSupply.sub(amount);\\n        emit Transfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Sets {decimals} to a value other than the default one of 18.\\n     *\\n     * WARNING: This function should only be called from the constructor. Most\\n     * applications that interact with token contracts will not expect\\n     * {decimals} to ever change, and may work incorrectly if it does.\\n     */\\n    function _setupDecimals(uint8 decimals_) internal {\\n        _decimals = decimals_;\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be to transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    function mint(address account, uint256 amount) external {\\n        _mint(account, amount);\\n    }\\n\\n    function burn(address account, uint256 amount) external {\\n        _burn(account, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x6ecfad7b5cc07241c6e374ffad39094162e039ffad68a42666053403d50486ec\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 4982,
                "contract": "src.sol/testing/NonconformingToken.sol:NonconformingToken",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 4988,
                "contract": "src.sol/testing/NonconformingToken.sol:NonconformingToken",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 4990,
                "contract": "src.sol/testing/NonconformingToken.sol:NonconformingToken",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 4992,
                "contract": "src.sol/testing/NonconformingToken.sol:NonconformingToken",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 4994,
                "contract": "src.sol/testing/NonconformingToken.sol:NonconformingToken",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              },
              {
                "astId": 4996,
                "contract": "src.sol/testing/NonconformingToken.sol:NonconformingToken",
                "label": "_decimals",
                "offset": 0,
                "slot": "5",
                "type": "t_uint8"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint8": {
                "encoding": "inplace",
                "label": "uint8",
                "numberOfBytes": "1"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/testing/ReentrantToken.sol": {
        "ReentrantToken": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_channel",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b50604051610d40380380610d408339818101604052602081101561003357600080fd5b5051604080518082018252600f81526e2932b2b73a3930b73a102a37b5b2b760891b602082810191825283518085019094526006845265424144424f4960d01b908401528151919291610088916003916100c3565b50805161009c9060049060208401906100c3565b505060058054601260ff199091161790555060601b6001600160601b031916608052610156565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010457805160ff1916838001178555610131565b82800160010185558215610131579182015b82811115610131578251825591602001919060010190610116565b5061013d929150610141565b5090565b5b8082111561013d5760008155600101610142565b60805160601c610bcd610173600039806103af5250610bcd6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f191461021057806370a082311461023e57806395d89b4114610264578063a457c2d71461026c578063a9059cbb14610298578063dd62ed3e146102c4576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd1461017657806323b872dd14610190578063313ce567146101c657806339509351146101e4575b600080fd5b6100c16102f2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610388565b604080519115158252519081900360200190f35b61017e6103a5565b60408051918252519081900360200190f35b610162600480360360608110156101a657600080fd5b506001600160a01b038135811691602081013590911690604001356103ab565b6101ce61044f565b6040805160ff9092168252519081900360200190f35b610162600480360360408110156101fa57600080fd5b506001600160a01b038135169060200135610458565b61023c6004803603604081101561022657600080fd5b506001600160a01b0381351690602001356104ab565b005b61017e6004803603602081101561025457600080fd5b50356001600160a01b03166104b9565b6100c16104d4565b6101626004803603604081101561028257600080fd5b506001600160a01b038135169060200135610535565b610162600480360360408110156102ae57600080fd5b506001600160a01b03813516906020013561059d565b61017e600480360360408110156102da57600080fd5b506001600160a01b03813581169160200135166105b1565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b600061039c6103956105dc565b84846105e0565b50600192915050565b60025490565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663635ae90130846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561042457600080fd5b505af1158015610438573d6000803e3d6000fd5b505050506104478484846106cc565b949350505050565b60055460ff1690565b600061039c6104656105dc565b846104a685600160006104766105dc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061074e565b6105e0565b6104b582826107af565b5050565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b600061039c6105426105dc565b846104a685604051806060016040528060258152602001610b73602591396001600061056c6105dc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061089f565b600061039c6105aa6105dc565b8484610936565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166106255760405162461bcd60e51b8152600401808060200182810382526024815260200180610b4f6024913960400191505060405180910390fd5b6001600160a01b03821661066a5760405162461bcd60e51b8152600401808060200182810382526022815260200180610aba6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60006106d9848484610936565b610744846106e56105dc565b6104a685604051806060016040528060288152602001610b02602891396001600160a01b038a166000908152600160205260408120906107236105dc565b6001600160a01b03168152602081019190915260400160002054919061089f565b5060019392505050565b6000828201838110156107a8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661080a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61081660008383610a91565b600254610823908261074e565b6002556001600160a01b038216600090815260208190526040902054610849908261074e565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818484111561092e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108f35781810151838201526020016108db565b50505050905090810190601f1680156109205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03831661097b5760405162461bcd60e51b8152600401808060200182810382526025815260200180610b2a6025913960400191505060405180910390fd5b6001600160a01b0382166109c05760405162461bcd60e51b8152600401808060200182810382526023815260200180610a976023913960400191505060405180910390fd5b6109cb838383610a91565b610a0881604051806060016040528060268152602001610adc602691396001600160a01b038616600090815260208190526040902054919061089f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610a37908261074e565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220392deab8cf090eb90fbc6e7e37a0f29412ba49b1a4a3e73ddddddbef4ef15cb364736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xD40 CODESIZE SUB DUP1 PUSH2 0xD40 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x2932B2B73A3930B73A102A37B5B2B7 PUSH1 0x89 SHL PUSH1 0x20 DUP3 DUP2 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH6 0x424144424F49 PUSH1 0xD0 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH2 0x88 SWAP2 PUSH1 0x3 SWAP2 PUSH2 0xC3 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x9C SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0xC3 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x12 PUSH1 0xFF NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x80 MSTORE PUSH2 0x156 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x104 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x131 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x131 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x131 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x116 JUMP JUMPDEST POP PUSH2 0x13D SWAP3 SWAP2 POP PUSH2 0x141 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x142 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0xBCD PUSH2 0x173 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x3AF MSTORE POP PUSH2 0xBCD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C4 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2F2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH2 0x3A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x458 JUMP JUMPDEST PUSH2 0x23C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4AB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4B9 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x535 JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x59D JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5B1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x361 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x395 PUSH2 0x5DC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x5E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x635AE901 ADDRESS DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x424 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x438 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x447 DUP5 DUP5 DUP5 PUSH2 0x6CC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x465 PUSH2 0x5DC JUMP JUMPDEST DUP5 PUSH2 0x4A6 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x476 PUSH2 0x5DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x74E JUMP JUMPDEST PUSH2 0x5E0 JUMP JUMPDEST PUSH2 0x4B5 DUP3 DUP3 PUSH2 0x7AF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x542 PUSH2 0x5DC JUMP JUMPDEST DUP5 PUSH2 0x4A6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB73 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x56C PUSH2 0x5DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x89F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x5AA PUSH2 0x5DC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x936 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x625 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB4F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x66A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xABA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6D9 DUP5 DUP5 DUP5 PUSH2 0x936 JUMP JUMPDEST PUSH2 0x744 DUP5 PUSH2 0x6E5 PUSH2 0x5DC JUMP JUMPDEST PUSH2 0x4A6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB02 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x723 PUSH2 0x5DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x89F JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x7A8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x80A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x816 PUSH1 0x0 DUP4 DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x823 SWAP1 DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x849 SWAP1 DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8DB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x920 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB2A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA97 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9CB DUP4 DUP4 DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH2 0xA08 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xADC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x89F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA37 SWAP1 DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220392D 0xEA 0xB8 0xCF MULMOD 0xE 0xB9 0xF 0xBC PUSH15 0x7E37A0F29412BA49B1A4A3E73DDDDD 0xDB 0xEF 0x4E CALL 0x5C 0xB3 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "157:623:40:-:0;;;236:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;236:100:40;2013:134:6;;;;;;;;;;;-1:-1:-1;;;236:100:40;2013:134:6;;;;;;;;;;;;;;;;;-1:-1:-1;;;2013:134:6;;;;2078:12;;2013:134;;;2078:12;;:5;;:12;:::i;:::-;-1:-1:-1;2100:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2126:9:6;:14;;2138:2;-1:-1:-1;;2126:14:6;;;;;;-1:-1:-1;311:18:40::1;::::0;-1:-1:-1;;;;;;311:18:40;::::1;::::0;157:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;157:623:40;;;-1:-1:-1;157:623:40;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "5504": [
                  {
                    "length": 32,
                    "start": 943
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f191461021057806370a082311461023e57806395d89b4114610264578063a457c2d71461026c578063a9059cbb14610298578063dd62ed3e146102c4576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd1461017657806323b872dd14610190578063313ce567146101c657806339509351146101e4575b600080fd5b6100c16102f2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610388565b604080519115158252519081900360200190f35b61017e6103a5565b60408051918252519081900360200190f35b610162600480360360608110156101a657600080fd5b506001600160a01b038135811691602081013590911690604001356103ab565b6101ce61044f565b6040805160ff9092168252519081900360200190f35b610162600480360360408110156101fa57600080fd5b506001600160a01b038135169060200135610458565b61023c6004803603604081101561022657600080fd5b506001600160a01b0381351690602001356104ab565b005b61017e6004803603602081101561025457600080fd5b50356001600160a01b03166104b9565b6100c16104d4565b6101626004803603604081101561028257600080fd5b506001600160a01b038135169060200135610535565b610162600480360360408110156102ae57600080fd5b506001600160a01b03813516906020013561059d565b61017e600480360360408110156102da57600080fd5b506001600160a01b03813581169160200135166105b1565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b600061039c6103956105dc565b84846105e0565b50600192915050565b60025490565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663635ae90130846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561042457600080fd5b505af1158015610438573d6000803e3d6000fd5b505050506104478484846106cc565b949350505050565b60055460ff1690565b600061039c6104656105dc565b846104a685600160006104766105dc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061074e565b6105e0565b6104b582826107af565b5050565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561037e5780601f106103535761010080835404028352916020019161037e565b600061039c6105426105dc565b846104a685604051806060016040528060258152602001610b73602591396001600061056c6105dc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061089f565b600061039c6105aa6105dc565b8484610936565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166106255760405162461bcd60e51b8152600401808060200182810382526024815260200180610b4f6024913960400191505060405180910390fd5b6001600160a01b03821661066a5760405162461bcd60e51b8152600401808060200182810382526022815260200180610aba6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60006106d9848484610936565b610744846106e56105dc565b6104a685604051806060016040528060288152602001610b02602891396001600160a01b038a166000908152600160205260408120906107236105dc565b6001600160a01b03168152602081019190915260400160002054919061089f565b5060019392505050565b6000828201838110156107a8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661080a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61081660008383610a91565b600254610823908261074e565b6002556001600160a01b038216600090815260208190526040902054610849908261074e565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818484111561092e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108f35781810151838201526020016108db565b50505050905090810190601f1680156109205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03831661097b5760405162461bcd60e51b8152600401808060200182810382526025815260200180610b2a6025913960400191505060405180910390fd5b6001600160a01b0382166109c05760405162461bcd60e51b8152600401808060200182810382526023815260200180610a976023913960400191505060405180910390fd5b6109cb838383610a91565b610a0881604051806060016040528060268152602001610adc602691396001600160a01b038616600090815260208190526040902054919061089f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610a37908261074e565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220392deab8cf090eb90fbc6e7e37a0f29412ba49b1a4a3e73ddddddbef4ef15cb364736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C4 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2F2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17E PUSH2 0x3A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x458 JUMP JUMPDEST PUSH2 0x23C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4AB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4B9 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x535 JUMP JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x59D JUMP JUMPDEST PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5B1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x361 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x395 PUSH2 0x5DC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x5E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x635AE901 ADDRESS DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x424 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x438 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x447 DUP5 DUP5 DUP5 PUSH2 0x6CC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x465 PUSH2 0x5DC JUMP JUMPDEST DUP5 PUSH2 0x4A6 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x476 PUSH2 0x5DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x74E JUMP JUMPDEST PUSH2 0x5E0 JUMP JUMPDEST PUSH2 0x4B5 DUP3 DUP3 PUSH2 0x7AF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x37E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x353 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x542 PUSH2 0x5DC JUMP JUMPDEST DUP5 PUSH2 0x4A6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB73 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x56C PUSH2 0x5DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x89F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39C PUSH2 0x5AA PUSH2 0x5DC JUMP JUMPDEST DUP5 DUP5 PUSH2 0x936 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x625 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB4F PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x66A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xABA PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6D9 DUP5 DUP5 DUP5 PUSH2 0x936 JUMP JUMPDEST PUSH2 0x744 DUP5 PUSH2 0x6E5 PUSH2 0x5DC JUMP JUMPDEST PUSH2 0x4A6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB02 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x723 PUSH2 0x5DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x89F JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x7A8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x80A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x816 PUSH1 0x0 DUP4 DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x823 SWAP1 DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x849 SWAP1 DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8DB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x920 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB2A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xA97 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9CB DUP4 DUP4 DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH2 0xA08 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xADC PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x89F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA37 SWAP1 DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220392D 0xEA 0xB8 0xCF MULMOD 0xE 0xB9 0xF 0xBC PUSH15 0x7E37A0F29412BA49B1A4A3E73DDDDD 0xDB 0xEF 0x4E CALL 0x5C 0xB3 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "157:623:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4248:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4248:166:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3255:98;;;:::i;:::-;;;;;;;;;;;;;;;;506:272:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;506:272:40;;;;;;;;;;;;;;;;;:::i;3114:81:6:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5586:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5586:215:6;;;;;;;;:::i;342:95:40:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;342:95:40;;;;;;;;:::i;:::-;;3411:117:6;;;;;;;;;;;;;;;;-1:-1:-1;3411:117:6;-1:-1:-1;;;;;3411:117:6;;:::i;2406:85::-;;;:::i;6288:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6288:266:6;;;;;;;;:::i;3731:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3731:172:6;;;;;;;;:::i;3961:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3961:149:6;;;;;;;;;;:::i;2212:81::-;2281:5;2274:12;;;;;;;;-1:-1:-1;;2274:12:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2249:13;;2274:12;;2281:5;;2274:12;;2281:5;2274:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81;:::o;4248:166::-;4331:4;4347:39;4356:12;:10;:12::i;:::-;4370:7;4379:6;4347:8;:39::i;:::-;-1:-1:-1;4403:4:6;4248:166;;;;:::o;3255:98::-;3334:12;;3255:98;:::o;506:272:40:-;634:4;665:7;-1:-1:-1;;;;;650:36:40;;695:4;702:6;650:59;;;;;;;;;;;;;-1:-1:-1;;;;;650:59:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:45;745:6;753:9;764:6;726:18;:45::i;:::-;719:52;506:272;-1:-1:-1;;;;506:272:40:o;3114:81:6:-;3179:9;;;;3114:81;:::o;5586:215::-;5674:4;5690:83;5699:12;:10;:12::i;:::-;5713:7;5722:50;5761:10;5722:11;:25;5734:12;:10;:12::i;:::-;-1:-1:-1;;;;;5722:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;5722:25:6;;;:34;;;;;;;;;;;:38;:50::i;:::-;5690:8;:83::i;342:95:40:-;408:22;414:7;423:6;408:5;:22::i;:::-;342:95;;:::o;3411:117:6:-;-1:-1:-1;;;;;3503:18:6;3477:7;3503:18;;;;;;;;;;;;3411:117::o;2406:85::-;2477:7;2470:14;;;;;;;;-1:-1:-1;;2470:14:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2445:13;;2470:14;;2477:7;;2470:14;;2477:7;2470:14;;;;;;;;;;;;;;;;;;;;;;;;6288:266;6381:4;6397:129;6406:12;:10;:12::i;:::-;6420:7;6429:96;6468:15;6429:96;;;;;;;;;;;;;;;;;:11;:25;6441:12;:10;:12::i;:::-;-1:-1:-1;;;;;6429:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;6429:25:6;;;:34;;;;;;;;;;;:96;:38;:96::i;3731:172::-;3817:4;3833:42;3843:12;:10;:12::i;:::-;3857:9;3868:6;3833:9;:42::i;3961:149::-;-1:-1:-1;;;;;4076:18:6;;;4050:7;4076:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3961:149::o;590:104:0:-;677:10;590:104;:::o;9350:340:6:-;-1:-1:-1;;;;;9451:19:6;;9443:68;;;;-1:-1:-1;;;9443:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9529:21:6;;9521:68;;;;-1:-1:-1;;;9521:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9600:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9651:32;;;;;;;;;;;;;;;;;9350:340;;;:::o;4874:317::-;4980:4;4996:36;5006:6;5014:9;5025:6;4996:9;:36::i;:::-;5042:121;5051:6;5059:12;:10;:12::i;:::-;5073:89;5111:6;5073:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5073:19:6;;;;;;:11;:19;;;;;;5093:12;:10;:12::i;:::-;-1:-1:-1;;;;;5073:33:6;;;;;;;;;;;;-1:-1:-1;5073:33:6;;;:89;:37;:89::i;5042:121::-;-1:-1:-1;5180:4:6;4874:317;;;;;:::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;7828:370:6:-;-1:-1:-1;;;;;7911:21:6;;7903:65;;;;;-1:-1:-1;;;7903:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7979:49;8008:1;8012:7;8021:6;7979:20;:49::i;:::-;8054:12;;:24;;8071:6;8054:16;:24::i;:::-;8039:12;:39;-1:-1:-1;;;;;8109:18:6;;:9;:18;;;;;;;;;;;:30;;8132:6;8109:22;:30::i;:::-;-1:-1:-1;;;;;8088:18:6;;:9;:18;;;;;;;;;;;:51;;;;8154:37;;;;;;;8088:18;;:9;;8154:37;;;;;;;;;;7828:370;;:::o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:5;;;1746:187::o;7028:530:6:-;-1:-1:-1;;;;;7133:20:6;;7125:70;;;;-1:-1:-1;;;7125:70:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7213:23:6;;7205:71;;;;-1:-1:-1;;;7205:71:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7287:47;7308:6;7316:9;7327:6;7287:20;:47::i;:::-;7365:71;7387:6;7365:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7365:17:6;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7345:17:6;;;:9;:17;;;;;;;;;;;:91;;;;7469:20;;;;;;;:32;;7494:6;7469:24;:32::i;:::-;-1:-1:-1;;;;;7446:20:6;;;:9;:20;;;;;;;;;;;;:55;;;;7516:35;;;;;;;7446:20;;7516:35;;;;;;;;;;;;;7028:530;;;:::o;10688:92::-;;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "604200",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "1360",
                "approve(address,uint256)": "infinite",
                "balanceOf(address)": "1167",
                "decimals()": "1102",
                "decreaseAllowance(address,uint256)": "infinite",
                "increaseAllowance(address,uint256)": "infinite",
                "mint(address,uint256)": "infinite",
                "name()": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "1043",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "mint(address,uint256)": "40c10f19",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_channel\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/ReentrantToken.sol\":\"ReentrantToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../../GSN/Context.sol\\\";\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n    using SafeMath for uint256;\\n    using Address for address;\\n\\n    mapping (address => uint256) private _balances;\\n\\n    mapping (address => mapping (address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n    uint8 private _decimals;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n     * a default value of 18.\\n     *\\n     * To select a different value for {decimals}, use {_setupDecimals}.\\n     *\\n     * All three of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor (string memory name, string memory symbol) {\\n        _name = name;\\n        _symbol = symbol;\\n        _decimals = 18;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n     * called.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20};\\n     *\\n     * Requirements:\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\\n     *\\n     * This is internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        _balances[sender] = _balances[sender].sub(amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        _balances[recipient] = _balances[recipient].add(amount);\\n        emit Transfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `to` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply = _totalSupply.add(amount);\\n        _balances[account] = _balances[account].add(amount);\\n        emit Transfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        _balances[account] = _balances[account].sub(amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        _totalSupply = _totalSupply.sub(amount);\\n        emit Transfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Sets {decimals} to a value other than the default one of 18.\\n     *\\n     * WARNING: This function should only be called from the constructor. Most\\n     * applications that interact with token contracts will not expect\\n     * {decimals} to ever change, and may work incorrectly if it does.\\n     */\\n    function _setupDecimals(uint8 decimals_) internal {\\n        _decimals = decimals_;\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be to transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\\n}\\n\",\"keccak256\":\"0xf1ac0ee2ca2b36f90574d3b2b37422ced4fa829741d80794c62f5958a2d8f474\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/testing/ReentrantToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.1;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport \\\"../interfaces/IVectorChannel.sol\\\";\\n\\ncontract ReentrantToken is ERC20 {\\n    address private immutable channel;\\n\\n    constructor(address _channel) ERC20(\\\"Reentrant Token\\\", \\\"BADBOI\\\") {\\n        channel = _channel;\\n    }\\n\\n    function mint(address account, uint256 amount) external {\\n        _mint(account, amount);\\n    }\\n\\n    // Designed to be called alongside CMCDeposit.depositAlice\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public override returns (bool) {\\n        IVectorChannel(channel).depositAlice(address(this), amount);\\n        return super.transferFrom(sender, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x1d7536bdb78960b5bb7d1b2b21cca18444e6f43fa69be40a83d2f9f1443f7d94\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 590,
                "contract": "src.sol/testing/ReentrantToken.sol:ReentrantToken",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 596,
                "contract": "src.sol/testing/ReentrantToken.sol:ReentrantToken",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 598,
                "contract": "src.sol/testing/ReentrantToken.sol:ReentrantToken",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 600,
                "contract": "src.sol/testing/ReentrantToken.sol:ReentrantToken",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 602,
                "contract": "src.sol/testing/ReentrantToken.sol:ReentrantToken",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              },
              {
                "astId": 604,
                "contract": "src.sol/testing/ReentrantToken.sol:ReentrantToken",
                "label": "_decimals",
                "offset": 0,
                "slot": "5",
                "type": "t_uint8"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint8": {
                "encoding": "inplace",
                "label": "uint8",
                "numberOfBytes": "1"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/testing/TestChannel.sol": {
        "TestChannel": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "AliceDeposited",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                }
              ],
              "name": "ChannelDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "ChannelDisputed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "defunder",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedInitialState",
                  "type": "bytes"
                },
                {
                  "indexed": false,
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "TransferDefunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "disputer",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "state",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "dispute",
                  "type": "tuple"
                }
              ],
              "name": "TransferDisputed",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "address[]",
                  "name": "assetIds",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "indices",
                  "type": "uint256[]"
                }
              ],
              "name": "defundChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedInitialTransferState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedTransferResolver",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "responderSignature",
                  "type": "bytes"
                }
              ],
              "name": "defundTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "depositAlice",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "alice",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "bob",
                      "type": "address"
                    },
                    {
                      "internalType": "address[]",
                      "name": "assetIds",
                      "type": "address[]"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance[]",
                      "name": "balances",
                      "type": "tuple[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsA",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "processedDepositsB",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "defundNonces",
                      "type": "uint256[]"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreChannelState",
                  "name": "ccs",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "disputeChannel",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "transferId",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "address",
                      "name": "transferDefinition",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "initiator",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "responder",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256[2]",
                          "name": "amount",
                          "type": "uint256[2]"
                        },
                        {
                          "internalType": "address payable[2]",
                          "name": "to",
                          "type": "address[2]"
                        }
                      ],
                      "internalType": "struct Balance",
                      "name": "balance",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferTimeout",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "initialStateHash",
                      "type": "bytes32"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.CoreTransferState",
                  "name": "cts",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "merkleProofData",
                  "type": "bytes32[]"
                }
              ],
              "name": "disputeTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getBob",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChannelDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "channelStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes32",
                      "name": "merkleRoot",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "consensusExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "defundExpiry",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.ChannelDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getDefundNonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "getExitableAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsAlice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalDepositsBob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                }
              ],
              "name": "getTotalTransferred",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "transferId",
                  "type": "bytes32"
                }
              ],
              "name": "getTransferDispute",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes32",
                      "name": "transferStateHash",
                      "type": "bytes32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "transferDisputeExpiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bool",
                      "name": "isDefunded",
                      "type": "bool"
                    }
                  ],
                  "internalType": "struct ICMCAdjudicator.TransferDispute",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                }
              ],
              "name": "getWithdrawalTransactionRecord",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lock",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bob",
                  "type": "address"
                }
              ],
              "name": "setup",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "internalType": "struct Balance",
                  "name": "balance",
                  "type": "tuple"
                }
              ],
              "name": "testMakeBalanceExitable",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "address payable",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxAmount",
                  "type": "uint256"
                }
              ],
              "name": "testMakeExitable",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "channelAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "assetId",
                      "type": "address"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "callTo",
                      "type": "address"
                    },
                    {
                      "internalType": "bytes",
                      "name": "callData",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct WithdrawData",
                  "name": "wd",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "aliceSignature",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "bobSignature",
                  "type": "bytes"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "author": "Layne Haber <layne@connext.network>",
            "kind": "dev",
            "methods": {
              "getAlice()": {
                "returns": {
                  "_0": "Bob's signer address"
                }
              },
              "getBob()": {
                "returns": {
                  "_0": "Alice's signer address"
                }
              },
              "setup(address,address)": {
                "params": {
                  "_alice": ": Address representing user with function deposit",
                  "_bob": ": Address representing user with multisig deposit"
                }
              },
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": {
                "params": {
                  "aliceSignature": "Signature of owner a",
                  "bobSignature": "Signature of owner b",
                  "wd": "The withdraw data consisting of semantic withdraw information, i.e. assetId, recipient, and amount; information to make an optional call in addition to the actual transfer, i.e. target address for the call and call payload; additional information, i.e. channel address and nonce."
                }
              }
            },
            "title": "TestChannel",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b5030606081901b60805261411d61008b6000398061013e5280610471528061081d52806108985280610acc5280610bea5280610c93528061119c5280611311528061147952806115c4528061164e52806116e25280611766528061196a52806119f35280611a7c5280611b155280611b98525061411d6000f3fe60806040526004361061012e5760003560e01c80637b037295116100ab578063cefa51221161006f578063cefa5122146103ba578063e7283a8d146103da578063e9852569146103fa578063eeb30fea1461041a578063f19eb10e1461042f578063f83d08ba14610451576101ae565b80637b0372951461030d5780638c048fc21461032d578063b081e9c81461035a578063c55e1dac1461037a578063c60939be1461039a576101ae565b80634d3fcbda116100f25780634d3fcbda1461026d5780635bc9d96d1461028d5780635fd334d9146102ad578063635ae901146102cd5780636f33389e146102e0576101ae565b8063072f25fd146101b3578063241686a0146101d55780632c889aa1146102005780632d34ba79146102205780633ff0da1614610240576101ae565b366101ae57306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101855760405162461bcd60e51b815260040161017c90613dce565b60405180910390fd5b6001600054146101a75760405162461bcd60e51b815260040161017c90613b8a565b6001600055005b600080fd5b3480156101bf57600080fd5b506101d36101ce366004612ca7565b610466565b005b3480156101e157600080fd5b506101ea610810565b6040516101f791906132d0565b60405180910390f35b34801561020c57600080fd5b506101d361021b366004612d84565b61088d565b34801561022c57600080fd5b506101d361023b3660046128fe565b610ac1565b34801561024c57600080fd5b5061026061025b366004612a40565b610bd7565b6040516101f79190613ee9565b34801561027957600080fd5b506101d3610288366004612b45565b610c88565b34801561029957600080fd5b506101d36102a8366004612976565b611191565b3480156102b957600080fd5b506101d36102c8366004612c54565b611306565b6101d36102db3660046129f5565b61146e565b3480156102ec57600080fd5b506103006102fb3660046128e2565b6115b7565b6040516101f79190613f41565b34801561031957600080fd5b506101d36103283660046129c0565b611633565b34801561033957600080fd5b5061034d610348366004612d52565b611641565b6040516101f7919061349e565b34801561036657600080fd5b506103006103753660046128e2565b6116d5565b34801561038657600080fd5b506101d3610395366004612936565b61174b565b3480156103a657600080fd5b506101d36103b5366004612bd5565b61175b565b3480156103c657600080fd5b506103006103d53660046128e2565b61195d565b3480156103e657600080fd5b506103006103f53660046128e2565b6119e6565b34801561040657600080fd5b506103006104153660046128fe565b611a6f565b34801561042657600080fd5b506101ea611b08565b34801561043b57600080fd5b50610444611b85565b6040516101f79190613e8d565b34801561045d57600080fd5b50610300611c2d565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104af5760405162461bcd60e51b815260040161017c90613dce565b6001600054146104d15760405162461bcd60e51b815260040161017c90613b8a565b600260005586306104e560208301836128e2565b6001600160a01b03161461050b5760405162461bcd60e51b815260040161017c906136b0565b6020808901356000908152600d9091526040902060018101546105405760405162461bcd60e51b815260040161017c90613ad9565b805461054b8a611c33565b146105685760405162461bcd60e51b815260040161017c90613e3a565b600281015460ff161561058d5760405162461bcd60e51b815260040161017c906137f8565b60028101805460ff191660011790556105a4612699565b816001015442101561078c5789610160013589896040516105c6929190613270565b6040518091039020146105eb5760405162461bcd60e51b815260040161017c90613e3a565b6105fb60a08b0160808c016128e2565b6001600160a01b0316336001600160a01b0316148061066c575061066c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065f9250505060a08d0160808e016128e2565b6101608d01359190611c63565b6106885760405162461bcd60e51b815260040161017c90613d99565b600061069a60608c0160408d016128e2565b9050806001600160a01b0316638ef98a7e8c60c0016040516020016106bf9190613e7f565b6040516020818303038152906040528c8c8c8c6040518663ffffffff1660e01b81526004016106f29594939291906134c7565b60806040518083038186803b15801561070a57600080fd5b505afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190612a73565b915061075660c08c013560e08d0135611c8b565b82516020810151905161076891611c8b565b11156107865760405162461bcd60e51b815260040161017c90613e05565b506107a1565b61079e368b90038b0160c08c01612a58565b90505b6107ba6107b460c08c0160a08d016128e2565b82611cb7565b7f93f6b8187e81bd7d01ce234c043cd6ae4feda2e2ae91daae0962c68a656da8c7338b848c8c8c8c886040516107f7989796959493929190613396565b60405180910390a1505060016000555050505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561085b5760405162461bcd60e51b815260040161017c90613dce565b60016000541461087d5760405162461bcd60e51b815260040161017c90613b8a565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108d65760405162461bcd60e51b815260040161017c90613dce565b6001600054146108f85760405162461bcd60e51b815260040161017c90613b8a565b6002600055843061090c60208301836128e2565b6001600160a01b0316146109325760405162461bcd60e51b815260040161017c906135df565b600061093d87611d08565b905061094c8187878787611d1b565b60008181526006602052604090205460ff161561097b5760405162461bcd60e51b815260040161017c906139e8565b6000818152600660209081526040808320805460ff191660011790556109b3916109a9918b01908b016128e2565b8960600135611e25565b905060008111806109dd575060006109d160c08a0160a08b016128e2565b6001600160a01b031614155b6109f95760405162461bcd60e51b815260040161017c90613616565b610a22610a0c60408a0160208b016128e2565b610a1c60608b0160408c016128e2565b83611e39565b6000610a3460c08a0160a08b016128e2565b6001600160a01b031614610ab257610a5260c0890160a08a016128e2565b6001600160a01b031663f50cd32c89836040518363ffffffff1660e01b8152600401610a7f929190613f1f565b600060405180830381600087803b158015610a9957600080fd5b505af1158015610aad573d6000803e3d6000fd5b505050505b50506001600055505050505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610b0a5760405162461bcd60e51b815260040161017c90613dce565b6001546001600160a01b031615610b335760405162461bcd60e51b815260040161017c90613ce5565b6001600160a01b03821615801590610b5357506001600160a01b03811615155b610b6f5760405162461bcd60e51b815260040161017c90613970565b806001600160a01b0316826001600160a01b03161415610ba15760405162461bcd60e51b815260040161017c906136e5565b610ba9611e6a565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b610bdf6126be565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610c285760405162461bcd60e51b815260040161017c90613dce565b600160005414610c4a5760405162461bcd60e51b815260040161017c90613b8a565b506000908152600d60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610cd15760405162461bcd60e51b815260040161017c90613dce565b600160005414610cf35760405162461bcd60e51b815260040161017c90613b8a565b60026000558430610d0760208301836128e2565b6001600160a01b0316148015610d3f57506001546001600160a01b0316610d3460408301602084016128e2565b6001600160a01b0316145b8015610d6d57506002546001600160a01b0316610d6260608301604084016128e2565b6001600160a01b0316145b610d895760405162461bcd60e51b815260040161017c90613878565b83610da65760405162461bcd60e51b815260040161017c90613841565b83821115610dc65760405162461bcd60e51b815260040161017c90613d15565b600754610dd287611e71565b14610def5760405162461bcd60e51b815260040161017c90613564565b610df7611e84565b610e135760405162461bcd60e51b815260040161017c90613679565b60005b84811015611143576000868683818110610e2c57fe5b9050602002016020810190610e4191906128e2565b9050600084831015610ec657858584818110610e5957fe5b905060200201359050888060600190610e729190613f4a565b82818110610e7c57fe5b9050602002016020810190610e9191906128e2565b6001600160a01b0316826001600160a01b031614610ec15760405162461bcd60e51b815260040161017c906135a8565b610f32565b5060005b610ed760608a018a613f4a565b9050811015610f3257610eed60608a018a613f4a565b82818110610ef757fe5b9050602002016020810190610f0c91906128e2565b6001600160a01b0316826001600160a01b03161415610f2a57610f32565b600101610eca565b6000610f4160608b018b613f4a565b90508214610f6c57610f5660e08b018b613f4a565b83818110610f6057fe5b90506020020135610f6f565b60015b6001600160a01b0384166000908152600c60205260409020549091508111610fa95760405162461bcd60e51b815260040161017c906138f1565b6001600160a01b0383166000908152600c6020526040812091909155610fce83611ea1565b90506000610fdb84611ebc565b9050610fe5612699565b610ff260608d018d613f4a565b905084141561107c576040518060400160405280604051806040016040528086815260200185815250815260200160405180604001604052808f602001602081019061103e91906128e2565b6001600160a01b03166001600160a01b031681526020018f604001602081019061106891906128e2565b6001600160a01b0316905290529050611128565b61108960808d018d613f90565b8581811061109357fe5b9050608002018036038101906110a99190612a58565b90506110ea6110bb60a08e018e613f4a565b868181106110c557fe5b90506020020135840382600001516000600281106110df57fe5b602002015190611ef1565b8151526111216110fd60c08e018e613f4a565b8681811061110757fe5b90506020020135830382600001516001600281106110df57fe5b8151602001525b6111328582611cb7565b505060019093019250610e16915050565b507f49cbb28c69ffbdb6b3893f83d64557662a5dd43ffd6045b6a5180ab0a027f22433876007888860405161117c959493929190613317565b60405180910390a15050600160005550505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111da5760405162461bcd60e51b815260040161017c90613dce565b6001600054146111fc5760405162461bcd60e51b815260040161017c90613b8a565b6002600055336001600160a01b03831614806112295750806001600160a01b0316826001600160a01b0316145b6112455760405162461bcd60e51b815260040161017c90613cae565b6001600160a01b038084166000908152600460209081526040808320938616835292905290812054611278908590611e25565b90506000811161129a5760405162461bcd60e51b815260040161017c90613c05565b6001600160a01b038085166000908152600460209081526040808320938716835292905220546112ca9082611f0a565b6001600160a01b038086166000908152600460209081526040808320938816835292905220556112fb848383611e39565b505060016000555050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561134f5760405162461bcd60e51b815260040161017c90613dce565b6001600054146113715760405162461bcd60e51b815260040161017c90613b8a565b6002600055823061138560208301836128e2565b6001600160a01b0316146113ab5760405162461bcd60e51b815260040161017c906136b0565b60006113b685611c33565b90506113c9848460076002015484611f4c565b6113d1611e84565b6113ed5760405162461bcd60e51b815260040161017c90613679565b6020808601356000908152600d909152604090206001810154156114235760405162461bcd60e51b815260040161017c90613c65565b81815561143542610140880135611c8b565b60018201556040517f87b348a76dd4ef431d45553a1d8c5934db960e64201a5776ab64e3eb397f4cfa9061117c9033908990859061336a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114b75760405162461bcd60e51b815260040161017c90613dce565b6001600054146114d95760405162461bcd60e51b815260040161017c90613b8a565b60026000556114e782611fae565b156115105780341461150b5760405162461bcd60e51b815260040161017c90613a1f565b611556565b341561152e5760405162461bcd60e51b815260040161017c90613a98565b61153a82333084611fbb565b6115565760405162461bcd60e51b815260040161017c906139a7565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906115a69084908490613485565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116025760405162461bcd60e51b815260040161017c90613dce565b6001600054146116245760405162461bcd60e51b815260040161017c90613b8a565b61162d82611ea1565b92915050565b61163d8282611cb7565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561168c5760405162461bcd60e51b815260040161017c90613dce565b6001600054146116ae5760405162461bcd60e51b815260040161017c90613b8a565b600660006116bb84611d08565b815260208101919091526040016000205460ff1692915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117205760405162461bcd60e51b815260040161017c90613dce565b6001600054146117425760405162461bcd60e51b815260040161017c90613b8a565b61162d82611ebc565b61175683838361200e565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117a45760405162461bcd60e51b815260040161017c90613dce565b6001600054146117c65760405162461bcd60e51b815260040161017c90613b8a565b600260005584306117da60208301836128e2565b6001600160a01b031614801561181257506001546001600160a01b031661180760408301602084016128e2565b6001600160a01b0316145b801561184057506002546001600160a01b031661183560608301604084016128e2565b6001600160a01b0316145b61185c5760405162461bcd60e51b815260040161017c90613878565b600061186787611e71565b905061187787828888888861206f565b61187f611e84565b1561189c5760405162461bcd60e51b815260040161017c90613679565b600854610120880135116118c25760405162461bcd60e51b815260040161017c9061371c565b6118ca612179565b6118fe576118dd42610100890135611c8b565b600a556118fa6118f36101008901356002612181565b4290611c8b565b600b555b60078181556101208801356008556101408801356009556040517fef03cf86f2e77e1a0ae5cb25b50519e55b94788b920ace71f92341df2dab97ed916119479133918b916132e4565b60405180910390a1505060016000555050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156119a85760405162461bcd60e51b815260040161017c90613dce565b6001600054146119ca5760405162461bcd60e51b815260040161017c90613b8a565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611a315760405162461bcd60e51b815260040161017c90613dce565b600160005414611a535760405162461bcd60e51b815260040161017c90613b8a565b506001600160a01b03166000908152600c602052604090205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611aba5760405162461bcd60e51b815260040161017c90613dce565b600160005414611adc5760405162461bcd60e51b815260040161017c90613b8a565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611b535760405162461bcd60e51b815260040161017c90613dce565b600160005414611b755760405162461bcd60e51b815260040161017c90613b8a565b506001546001600160a01b031690565b611b8d6126de565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611bd65760405162461bcd60e51b815260040161017c90613dce565b600160005414611bf85760405162461bcd60e51b815260040161017c90613b8a565b506040805160a0810182526007548152600854602082015260095491810191909152600a546060820152600b54608082015290565b60005481565b600081604051602001611c469190613eda565b604051602081830303815290604052805190602001209050919050565b6000816001600160a01b0316611c7985856121bb565b6001600160a01b031614949350505050565b600082820183811015611cb05760405162461bcd60e51b815260040161017c906137c1565b9392505050565b60005b60028110156117565781516000908260028110611cd357fe5b602002015190508015611cff57611cff8484602001518460028110611cf457fe5b60200201518361200e565b50600101611cba565b600081604051602001611c469190613f0c565b6000600186604051602001611d31929190613502565b604051602081830303815290604052805190602001209050611d9785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600154859392506001600160a01b03169050611c63565b611db35760405162461bcd60e51b815260040161017c90613c2e565b611e0183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600254859392506001600160a01b03169050611c63565b611e1d5760405162461bcd60e51b815260040161017c90613939565b505050505050565b6000611cb082611e34856121d3565b61226a565b611e438382612280565b611e4e8383836122a2565b6117565760405162461bcd60e51b815260040161017c90613753565b6001600055565b600081604051602001611c469190613ec7565b60004260076003015411158015611e9c5750600b5442105b905090565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b0381166000908152600560209081526040808320546003909252822054611ee9846121d3565b010392915050565b600082820183811015611cb0576000195b949350505050565b6000611cb083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122cb565b611f8c8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692508591506122f79050565b611fa85760405162461bcd60e51b815260040161017c90613bc1565b50505050565b6001600160a01b03161590565b600061200585858585604051602401611fd693929190613461565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052612394565b95945050505050565b6001600160a01b0380841660009081526004602090815260408083209386168352929052205461203e9082611ef1565b6001600160a01b03938416600090815260046020908152604080832095909616825293909352929091209190915550565b60008086604051602001612084929190613502565b6040516020818303038152906040528051906020012090506120ee85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120e69250505060408a0160208b016128e2565b839190611c63565b61210a5760405162461bcd60e51b815260040161017c90613d58565b61215483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120e69250505060608a0160408b016128e2565b6121705760405162461bcd60e51b815260040161017c9061378a565b50505050505050565b600a54421090565b6000826121905750600061162d565b8282028284828161219d57fe5b0414611cb05760405162461bcd60e51b815260040161017c90613b1e565b6000806121c784612445565b9050611f028184612458565b60006121de82611fae565b612263576040516370a0823160e01b81526001600160a01b038316906370a082319061220e9030906004016132d0565b60206040518083038186803b15801561222657600080fd5b505afa15801561223a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225e9190612dbd565b61162d565b5047919050565b60008183106122795781611cb0565b5090919050565b6001600160a01b03909116600090815260036020526040902080549091019055565b60006122ad84611fae565b6122c1576122bc848484612586565b611f02565b611f028383612593565b600081848411156122ef5760405162461bcd60e51b815260040161017c919061351a565b505050900390565b600081815b855181101561238957600086828151811061231357fe5b60200260200101519050808311612354578281604051602001612337929190613262565b604051602081830303815290604052805190602001209250612380565b8083604051602001612367929190613262565b6040516020818303038152906040528051906020012092505b506001016122fc565b509092149392505050565b600061239f8361260b565b6123bb5760405162461bcd60e51b815260040161017c90613b5f565b60006060846001600160a01b0316846040516123d79190613280565b6000604051808303816000865af19150503d8060008114612414576040519150601f19603f3d011682016040523d82523d6000602084013e612419565b606091505b50915091506124288282612644565b805115806120055750808060200190518101906120059190612a20565b600081604051602001611c46919061329c565b6000815160411461247b5760405162461bcd60e51b815260040161017c90613642565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156124cd5760405162461bcd60e51b815260040161017c906138af565b8060ff16601b141580156124e557508060ff16601c14155b156125025760405162461bcd60e51b815260040161017c90613a56565b60006001878386866040516000815260200160405260405161252794939291906134a9565b6020604051602081039080840390855afa158015612549573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661257c5760405162461bcd60e51b815260040161017c9061352d565b9695505050505050565b6000611f02848484612651565b6000806060846001600160a01b0316846040516125af906132cd565b60006040518083038185875af1925050503d80600081146125ec576040519150601f19603f3d011682016040523d82523d6000602084013e6125f1565b606091505b50915091506126008282612644565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611f02575050151592915050565b8161163d57805160208201fd5b6000611f0284848460405160240161266a929190613485565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052612394565b60405180604001604052806126ac61270c565b81526020016126b961270c565b905290565b604080516060810182526000808252602082018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806002906020820280368337509192915050565b803561162d816140cf565b60008083601f840112612746578182fd5b5081356001600160401b0381111561275c578182fd5b602083019150836020808302850101111561277657600080fd5b9250929050565b600082601f83011261278d578081fd5b6127976040613fd6565b90508082846040850111156127ab57600080fd5b60005b60028110156127d75781356127c2816140cf565b835260209283019291909101906001016127ae565b50505092915050565b60008083601f8401126127f1578182fd5b5081356001600160401b03811115612807578182fd5b60208301915083602082850101111561277657600080fd5b600060808284031215612830578081fd5b61283a6040613fd6565b905082601f83011261284b57600080fd5b6128556040613fd6565b8083604085018681111561286857600080fd5b60005b600281101561288a57823585526020948501949092019160010161286b565b50828552612898878261277d565b60208601525050505092915050565b600061016082840312156128b9578081fd5b50919050565b600061018082840312156128b9578081fd5b600060e082840312156128b9578081fd5b6000602082840312156128f3578081fd5b8135611cb0816140cf565b60008060408385031215612910578081fd5b823561291b816140cf565b9150602083013561292b816140cf565b809150509250929050565b60008060006060848603121561294a578081fd5b8335612955816140cf565b92506020840135612965816140cf565b929592945050506040919091013590565b60008060006060848603121561298a578081fd5b8335612995816140cf565b925060208401356129a5816140cf565b915060408401356129b5816140cf565b809150509250925092565b60008060a083850312156129d2578182fd5b82356129dd816140cf565b91506129ec846020850161281f565b90509250929050565b60008060408385031215612a07578182fd5b8235612a12816140cf565b946020939093013593505050565b600060208284031215612a31578081fd5b81518015158114611cb0578182fd5b600060208284031215612a51578081fd5b5035919050565b600060808284031215612a69578081fd5b611cb0838361281f565b600060808284031215612a84578081fd5b612a8e6040613fd6565b83601f840112612a9c578182fd5b612aa66040613fd6565b80846040860187811115612ab8578586fd5b855b6002811015612ad9578251855260209485019490920191600101612aba565b5082855287605f880112612aeb578586fd5b612af56040613fd6565b9350839250905060808601871015612b0b578485fd5b845b6002811015612b36578151612b21816140cf565b84526020938401939190910190600101612b0d565b50506020830152509392505050565b600080600080600060608688031215612b5c578283fd5b85356001600160401b0380821115612b72578485fd5b612b7e89838a016128a7565b96506020880135915080821115612b93578485fd5b612b9f89838a01612735565b90965094506040880135915080821115612bb7578283fd5b50612bc488828901612735565b969995985093965092949392505050565b600080600080600060608688031215612bec578283fd5b85356001600160401b0380821115612c02578485fd5b612c0e89838a016128a7565b96506020880135915080821115612c23578485fd5b612c2f89838a016127e0565b90965094506040880135915080821115612c47578283fd5b50612bc4888289016127e0565b60008060006101a08486031215612c69578081fd5b612c7385856128bf565b92506101808401356001600160401b03811115612c8e578182fd5b612c9a86828701612735565b9497909650939450505050565b60008060008060008060006101e0888a031215612cc2578485fd5b612ccc89896128bf565b96506101808801356001600160401b0380821115612ce8578687fd5b612cf48b838c016127e0565b90985096506101a08a0135915080821115612d0d578384fd5b612d198b838c016127e0565b90965094506101c08a0135915080821115612d32578384fd5b50612d3f8a828b016127e0565b989b979a50959850939692959293505050565b600060208284031215612d63578081fd5b81356001600160401b03811115612d78578182fd5b611f02848285016128d1565b600080600080600060608688031215612d9b578283fd5b85356001600160401b0380821115612db1578485fd5b612c0e89838a016128d1565b600060208284031215612dce578081fd5b5051919050565b6001600160a01b03169052565b60008284526020808501945082825b85811015612e1f578135612e04816140cf565b6001600160a01b031687529582019590820190600101612df1565b509495945050505050565b60008284526020808501945082825b85811015612e1f576040808389378781018581529083019085905b6002821015612e85578235612e68816140cf565b6001600160a01b0316815291850191600191909101908501612e54565b5050506080968701969190910190600101612e39565b81835260006001600160fb1b03831115612eb3578081fd5b6020830280836020870137939093016020019283525090919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612f118160208601602086016140a3565b601f01601f19169290920160200192915050565b604081833760006040838101828152908301915b6002811015612f6a5760208335612f4f816140cf565b6001600160a01b031683529283019290910190600101612f39565b5050505050565b8054825260018101546020830152600281015460408301526003810154606083015260040154608090910152565b600061016060208301612fbb85612fb6838761272a565b612dd5565b612fc58185613ffc565b9050612fd46020860182612dd5565b50612fe26040840184613ffc565b612fef6040860182612dd5565b50612ffd6060840184614009565b8260608701526130108387018284612de2565b925050506130216080840184614050565b8583036080870152613034838284612e2a565b9250505061304560a0840184614009565b85830360a0870152613058838284612e9b565b9250505061306960c0840184614009565b85830360c087015261307c838284612e9b565b9250505061308d60e0840184614009565b85830360e08701526130a0838284612e9b565b6101008681013590880152610120808701359088015261014095860135959096019490945250929392505050565b80356130d9816140cf565b6001600160a01b039081168352602082810135908401526040820135906130ff826140cf565b1660408301526131126060820182613ffc565b61311f6060840182612dd5565b5061312d6080820182613ffc565b61313a6080840182612dd5565b5061314860a0820182613ffc565b61315560a0840182612dd5565b5061316660c0830160c08301612f25565b610140818101359083015261016090810135910152565b80548252600181015460208301526002015460ff161515604090910152565b600081356131a9816140cf565b6001600160a01b0390811684526020830135906131c5826140cf565b90811660208501526040830135906131dc826140cf565b8082166040860152606084013560608601526080840135608086015260a08401359150613208826140cf565b1660a084015260c082013536839003601e19018112613225578182fd5b820180356001600160401b0381111561323c578283fd5b80360384131561324a578283fd5b60e060c086015261200560e086018260208501612ecf565b918252602082015260400190565b6000828483379101908152919050565b600082516132928184602087016140a3565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260e06020820181905260009061330890830185612f9f565b9050611f026040830184612f71565b6001600160a01b03861681526101006020820181905260009061333c83820188612f9f565b905061334b6040840187612f71565b82810360e084015261335e818587612de2565b98975050505050505050565b6001600160a01b0384168152610200810161338860208301856130ce565b611f026101a083018461317d565b6001600160a01b038916815260006102c060206133b58185018c6130ce565b6133c36101a085018b61317d565b816102008501526133d7828501898b612ecf565b91508382036102208501526133ed828789612ecf565b85519093509150600061024085015b600282101561341b5783518152928201926001919091019082016133fc565b5050808501519150610280840160005b60028110156134505761343e8451614097565b8252928201929082019060010161342b565b505050509998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000606082526134da6060830188612ef9565b82810360208401526134ed818789612ecf565b9050828103604084015261335e818587612ecf565b604081016002841061351057fe5b9281526020015290565b600060208252611cb06020830184612ef9565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f60408201526309082a6960e31b606082015260800190565b6020808252601e908201527f434d4341646a7564696361746f723a20494e4445585f4d49534d415443480000604082015260600190565b6020808252601d908201527f434d4357697468647261773a204348414e4e454c5f4d49534d41544348000000604082015260600190565b6020808252601290820152710434d4357697468647261773a204e4f5f4f560741b604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f5048415345000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345000000604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f424f425f53494700604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11151955391115160ba1b606082015260800190565b6020808252601f908201527f434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e00604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c00604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526028908201527f434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f604082015267111151955391115160c21b606082015260800190565b6020808252601c908201527f434d4357697468647261773a20494e56414c49445f424f425f53494700000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601d908201527f434d4357697468647261773a20414c52454144595f4558454355544544000000604082015260600190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b60208082526025908201527f434d4341646a7564696361746f723a205452414e534645525f4e4f545f444953604082015264141555115160da1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f506040820152632927a7a360e11b606082015260800190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b6020808252601e908201527f434d4357697468647261773a20494e56414c49445f414c4943455f5349470000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11254d41555115160ba1b606082015260800190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b60208082526023908201527f434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e4760408201526254485360e81b606082015260800190565b60208082526021908201527f434d4341646a7564696361746f723a20494e56414c49445f414c4943455f53496040820152604760f81b606082015260800190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553604082015260600190565b60208082526025908201527f434d4341646a7564696361746f723a20494e56414c49445f5452414e534645526040820152640be9082a6960db1b606082015260800190565b6080810161162d8284612f25565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b600060208252611cb06020830184612f9f565b610180810161162d82846130ce565b815181526020808301519082015260409182015115159181019190915260600190565b600060208252611cb0602083018461319c565b600060408252613f32604083018561319c565b90508260208301529392505050565b90815260200190565b6000808335601e19843603018112613f60578283fd5b8301803591506001600160401b03821115613f79578283fd5b602090810192508102360382131561277657600080fd5b6000808335601e19843603018112613fa6578283fd5b8301803591506001600160401b03821115613fbf578283fd5b602001915060808102360382131561277657600080fd5b6040518181016001600160401b0381118282101715613ff457600080fd5b604052919050565b60008235611cb0816140cf565b6000808335601e1984360301811261401f578283fd5b83016020810192503590506001600160401b0381111561403e57600080fd5b60208102360383131561277657600080fd5b6000808335601e19843603018112614066578283fd5b83016020810192503590506001600160401b0381111561408557600080fd5b60808102360383131561277657600080fd5b6001600160a01b031690565b60005b838110156140be5781810151838201526020016140a6565b83811115611fa85750506000910152565b6001600160a01b03811681146140e457600080fd5b5056fea26469706673582212206d279b4c261127b0ad7885a389de95fd61d8c53ffa1396fac6001a4442fe321b64736f6c63430007010033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x80 MSTORE PUSH2 0x411D PUSH2 0x8B PUSH1 0x0 CODECOPY DUP1 PUSH2 0x13E MSTORE DUP1 PUSH2 0x471 MSTORE DUP1 PUSH2 0x81D MSTORE DUP1 PUSH2 0x898 MSTORE DUP1 PUSH2 0xACC MSTORE DUP1 PUSH2 0xBEA MSTORE DUP1 PUSH2 0xC93 MSTORE DUP1 PUSH2 0x119C MSTORE DUP1 PUSH2 0x1311 MSTORE DUP1 PUSH2 0x1479 MSTORE DUP1 PUSH2 0x15C4 MSTORE DUP1 PUSH2 0x164E MSTORE DUP1 PUSH2 0x16E2 MSTORE DUP1 PUSH2 0x1766 MSTORE DUP1 PUSH2 0x196A MSTORE DUP1 PUSH2 0x19F3 MSTORE DUP1 PUSH2 0x1A7C MSTORE DUP1 PUSH2 0x1B15 MSTORE DUP1 PUSH2 0x1B98 MSTORE POP PUSH2 0x411D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B037295 GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xCEFA5122 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0xE7283A8D EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0xF19EB10E EQ PUSH2 0x42F JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x451 JUMPI PUSH2 0x1AE JUMP JUMPDEST DUP1 PUSH4 0x7B037295 EQ PUSH2 0x30D JUMPI DUP1 PUSH4 0x8C048FC2 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0xC55E1DAC EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0xC60939BE EQ PUSH2 0x39A JUMPI PUSH2 0x1AE JUMP JUMPDEST DUP1 PUSH4 0x4D3FCBDA GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x4D3FCBDA EQ PUSH2 0x26D JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x5FD334D9 EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x6F33389E EQ PUSH2 0x2E0 JUMPI PUSH2 0x1AE JUMP JUMPDEST DUP1 PUSH4 0x72F25FD EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x241686A0 EQ PUSH2 0x1D5 JUMPI DUP1 PUSH4 0x2C889AA1 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0x3FF0DA16 EQ PUSH2 0x240 JUMPI PUSH2 0x1AE JUMP JUMPDEST CALLDATASIZE PUSH2 0x1AE JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0x2CA7 JUMP JUMPDEST PUSH2 0x466 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EA PUSH2 0x810 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x32D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x2D84 JUMP JUMPDEST PUSH2 0x88D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x23B CALLDATASIZE PUSH1 0x4 PUSH2 0x28FE JUMP JUMPDEST PUSH2 0xAC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x260 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x2A40 JUMP JUMPDEST PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x3EE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x288 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B45 JUMP JUMPDEST PUSH2 0xC88 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2976 JUMP JUMPDEST PUSH2 0x1191 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x2C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C54 JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST PUSH2 0x1D3 PUSH2 0x2DB CALLDATASIZE PUSH1 0x4 PUSH2 0x29F5 JUMP JUMPDEST PUSH2 0x146E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x15B7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x3F41 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x328 CALLDATASIZE PUSH1 0x4 PUSH2 0x29C0 JUMP JUMPDEST PUSH2 0x1633 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x348 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D52 JUMP JUMPDEST PUSH2 0x1641 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x349E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x375 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x16D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x2936 JUMP JUMPDEST PUSH2 0x174B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x3B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BD5 JUMP JUMPDEST PUSH2 0x175B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x195D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x3F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x19E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x415 CALLDATASIZE PUSH1 0x4 PUSH2 0x28FE JUMP JUMPDEST PUSH2 0x1A6F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EA PUSH2 0x1B08 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x444 PUSH2 0x1B85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x3E8D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x1C2D JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x4D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP7 ADDRESS PUSH2 0x4E5 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x50B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x540 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3AD9 JUMP JUMPDEST DUP1 SLOAD PUSH2 0x54B DUP11 PUSH2 0x1C33 JUMP JUMPDEST EQ PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3E3A JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x58D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x37F8 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x5A4 PUSH2 0x2699 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x78C JUMPI DUP10 PUSH2 0x160 ADD CALLDATALOAD DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0x5C6 SWAP3 SWAP2 SWAP1 PUSH2 0x3270 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 EQ PUSH2 0x5EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3E3A JUMP JUMPDEST PUSH2 0x5FB PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x66C JUMPI POP PUSH2 0x66C DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x65F SWAP3 POP POP POP PUSH1 0xA0 DUP14 ADD PUSH1 0x80 DUP15 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x160 DUP14 ADD CALLDATALOAD SWAP2 SWAP1 PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x688 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3D99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69A PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x28E2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8EF98A7E DUP13 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x6BF SWAP2 SWAP1 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6F2 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34C7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x71E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x742 SWAP2 SWAP1 PUSH2 0x2A73 JUMP JUMPDEST SWAP2 POP PUSH2 0x756 PUSH1 0xC0 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP14 ADD CALLDATALOAD PUSH2 0x1C8B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x768 SWAP2 PUSH2 0x1C8B JUMP JUMPDEST GT ISZERO PUSH2 0x786 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3E05 JUMP JUMPDEST POP PUSH2 0x7A1 JUMP JUMPDEST PUSH2 0x79E CALLDATASIZE DUP12 SWAP1 SUB DUP12 ADD PUSH1 0xC0 DUP13 ADD PUSH2 0x2A58 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x7BA PUSH2 0x7B4 PUSH1 0xC0 DUP13 ADD PUSH1 0xA0 DUP14 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP3 PUSH2 0x1CB7 JUMP JUMPDEST PUSH32 0x93F6B8187E81BD7D01CE234C043CD6AE4FEDA2E2AE91DAAE0962C68A656DA8C7 CALLER DUP12 DUP5 DUP13 DUP13 DUP13 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x7F7 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3396 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x85B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x87D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x8F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x90C PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x932 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x93D DUP8 PUSH2 0x1D08 JUMP JUMPDEST SWAP1 POP PUSH2 0x94C DUP2 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1D1B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x39E8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x9B3 SWAP2 PUSH2 0x9A9 SWAP2 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP10 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x1E25 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 PUSH2 0x9DD JUMPI POP PUSH1 0x0 PUSH2 0x9D1 PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x9F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3616 JUMP JUMPDEST PUSH2 0xA22 PUSH2 0xA0C PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0xA1C PUSH1 0x60 DUP12 ADD PUSH1 0x40 DUP13 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP4 PUSH2 0x1E39 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA34 PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xAB2 JUMPI PUSH2 0xA52 PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF50CD32C DUP10 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7F SWAP3 SWAP2 SWAP1 PUSH2 0x3F1F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAAD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xB0A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xB33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3CE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xB53 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0xB6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3970 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x36E5 JUMP JUMPDEST PUSH2 0xBA9 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xBDF PUSH2 0x26BE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xC28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xC4A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xCF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0xD07 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xD3F JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD34 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0xD6D JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD62 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xD89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3878 JUMP JUMPDEST DUP4 PUSH2 0xDA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3841 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH2 0xDC6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3D15 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0xDD2 DUP8 PUSH2 0x1E71 JUMP JUMPDEST EQ PUSH2 0xDEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3564 JUMP JUMPDEST PUSH2 0xDF7 PUSH2 0x1E84 JUMP JUMPDEST PUSH2 0xE13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3679 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0xE2C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE41 SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP4 LT ISZERO PUSH2 0xEC6 JUMPI DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xE59 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 POP DUP9 DUP1 PUSH1 0x60 ADD SWAP1 PUSH2 0xE72 SWAP2 SWAP1 PUSH2 0x3F4A JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xE7C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE91 SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xEC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x35A8 JUMP JUMPDEST PUSH2 0xF32 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH2 0xED7 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3F4A JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0xF32 JUMPI PUSH2 0xEED PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3F4A JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xEF7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xF0C SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF32 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xECA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF41 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x3F4A JUMP JUMPDEST SWAP1 POP DUP3 EQ PUSH2 0xF6C JUMPI PUSH2 0xF56 PUSH1 0xE0 DUP12 ADD DUP12 PUSH2 0x3F4A JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0xF60 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0xF6F JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT PUSH2 0xFA9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x38F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xFCE DUP4 PUSH2 0x1EA1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFDB DUP5 PUSH2 0x1EBC JUMP JUMPDEST SWAP1 POP PUSH2 0xFE5 PUSH2 0x2699 JUMP JUMPDEST PUSH2 0xFF2 PUSH1 0x60 DUP14 ADD DUP14 PUSH2 0x3F4A JUMP JUMPDEST SWAP1 POP DUP5 EQ ISZERO PUSH2 0x107C JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP16 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x103E SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 PUSH1 0x40 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1068 SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE SWAP1 MSTORE SWAP1 POP PUSH2 0x1128 JUMP JUMPDEST PUSH2 0x1089 PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x3F90 JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0x1093 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x80 MUL ADD DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x10A9 SWAP2 SWAP1 PUSH2 0x2A58 JUMP JUMPDEST SWAP1 POP PUSH2 0x10EA PUSH2 0x10BB PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x3F4A JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x10C5 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP5 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x10DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x1EF1 JUMP JUMPDEST DUP2 MLOAD MSTORE PUSH2 0x1121 PUSH2 0x10FD PUSH1 0xC0 DUP15 ADD DUP15 PUSH2 0x3F4A JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x1107 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x10DF JUMPI INVALID JUMPDEST DUP2 MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST PUSH2 0x1132 DUP6 DUP3 PUSH2 0x1CB7 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0xE16 SWAP2 POP POP JUMP JUMPDEST POP PUSH32 0x49CBB28C69FFBDB6B3893F83D64557662A5DD43FFD6045B6A5180AB0A027F224 CALLER DUP8 PUSH1 0x7 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x117C SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3317 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x11DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x11FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x1229 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x1245 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3CAE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x1278 SWAP1 DUP6 SWAP1 PUSH2 0x1E25 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x129A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3C05 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x12CA SWAP1 DUP3 PUSH2 0x1F0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x12FB DUP5 DUP4 DUP4 PUSH2 0x1E39 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x134F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1371 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP3 ADDRESS PUSH2 0x1385 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x13AB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B6 DUP6 PUSH2 0x1C33 JUMP JUMPDEST SWAP1 POP PUSH2 0x13C9 DUP5 DUP5 PUSH1 0x7 PUSH1 0x2 ADD SLOAD DUP5 PUSH2 0x1F4C JUMP JUMPDEST PUSH2 0x13D1 PUSH2 0x1E84 JUMP JUMPDEST PUSH2 0x13ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3679 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0x1423 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3C65 JUMP JUMPDEST DUP2 DUP2 SSTORE PUSH2 0x1435 TIMESTAMP PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0x87B348A76DD4EF431D45553A1D8C5934DB960E64201A5776AB64E3EB397F4CFA SWAP1 PUSH2 0x117C SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP6 SWAP1 PUSH2 0x336A JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x14B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x14D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x14E7 DUP3 PUSH2 0x1FAE JUMP JUMPDEST ISZERO PUSH2 0x1510 JUMPI DUP1 CALLVALUE EQ PUSH2 0x150B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3A1F JUMP JUMPDEST PUSH2 0x1556 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x152E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3A98 JUMP JUMPDEST PUSH2 0x153A DUP3 CALLER ADDRESS DUP5 PUSH2 0x1FBB JUMP JUMPDEST PUSH2 0x1556 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x39A7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x15A6 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x3485 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1624 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH2 0x162D DUP3 PUSH2 0x1EA1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x163D DUP3 DUP3 PUSH2 0x1CB7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x168C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x16AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 PUSH2 0x16BB DUP5 PUSH2 0x1D08 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1720 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1742 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH2 0x162D DUP3 PUSH2 0x1EBC JUMP JUMPDEST PUSH2 0x1756 DUP4 DUP4 DUP4 PUSH2 0x200E JUMP JUMPDEST POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x17A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x17C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x17DA PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x1812 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1807 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x1840 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1835 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x185C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1867 DUP8 PUSH2 0x1E71 JUMP JUMPDEST SWAP1 POP PUSH2 0x1877 DUP8 DUP3 DUP9 DUP9 DUP9 DUP9 PUSH2 0x206F JUMP JUMPDEST PUSH2 0x187F PUSH2 0x1E84 JUMP JUMPDEST ISZERO PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3679 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x120 DUP9 ADD CALLDATALOAD GT PUSH2 0x18C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x371C JUMP JUMPDEST PUSH2 0x18CA PUSH2 0x2179 JUMP JUMPDEST PUSH2 0x18FE JUMPI PUSH2 0x18DD TIMESTAMP PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0xA SSTORE PUSH2 0x18FA PUSH2 0x18F3 PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH1 0x2 PUSH2 0x2181 JUMP JUMPDEST TIMESTAMP SWAP1 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x7 DUP2 DUP2 SSTORE PUSH2 0x120 DUP9 ADD CALLDATALOAD PUSH1 0x8 SSTORE PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH1 0x9 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEF03CF86F2E77E1A0AE5CB25B50519E55B94788B920ACE71F92341DF2DAB97ED SWAP2 PUSH2 0x1947 SWAP2 CALLER SWAP2 DUP12 SWAP2 PUSH2 0x32E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x19A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x19CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1A53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1ABA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1ADC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1B53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1B75 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1B8D PUSH2 0x26DE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1BD6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1BF8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x7 SLOAD DUP2 MSTORE PUSH1 0x8 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x9 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xB SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x3EDA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C79 DUP6 DUP6 PUSH2 0x21BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1CB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x37C1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1756 JUMPI DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 PUSH1 0x2 DUP2 LT PUSH2 0x1CD3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 POP DUP1 ISZERO PUSH2 0x1CFF JUMPI PUSH2 0x1CFF DUP5 DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x2 DUP2 LT PUSH2 0x1CF4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x200E JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1CBA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x3F0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1D31 SWAP3 SWAP2 SWAP1 PUSH2 0x3502 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1D97 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x1 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x1DB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3C2E JUMP JUMPDEST PUSH2 0x1E01 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x2 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x1E1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3939 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CB0 DUP3 PUSH2 0x1E34 DUP6 PUSH2 0x21D3 JUMP JUMPDEST PUSH2 0x226A JUMP JUMPDEST PUSH2 0x1E43 DUP4 DUP3 PUSH2 0x2280 JUMP JUMPDEST PUSH2 0x1E4E DUP4 DUP4 DUP4 PUSH2 0x22A2 JUMP JUMPDEST PUSH2 0x1756 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3753 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x3EC7 JUMP JUMPDEST PUSH1 0x0 TIMESTAMP PUSH1 0x7 PUSH1 0x3 ADD SLOAD GT ISZERO DUP1 ISZERO PUSH2 0x1E9C JUMPI POP PUSH1 0xB SLOAD TIMESTAMP LT JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0x1EE9 DUP5 PUSH2 0x21D3 JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1CB0 JUMPI PUSH1 0x0 NOT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CB0 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x22CB JUMP JUMPDEST PUSH2 0x1F8C DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x22F7 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FA8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3BC1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2005 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1FD6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2394 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x203E SWAP1 DUP3 PUSH2 0x1EF1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP7 AND DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2084 SWAP3 SWAP2 SWAP1 PUSH2 0x3502 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x20EE DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x20E6 SWAP3 POP POP POP PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP4 SWAP2 SWAP1 PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x210A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3D58 JUMP JUMPDEST PUSH2 0x2154 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x20E6 SWAP3 POP POP POP PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x2170 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x378A JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD TIMESTAMP LT SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2190 JUMPI POP PUSH1 0x0 PUSH2 0x162D JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x219D JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1CB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x21C7 DUP5 PUSH2 0x2445 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F02 DUP2 DUP5 PUSH2 0x2458 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21DE DUP3 PUSH2 0x1FAE JUMP JUMPDEST PUSH2 0x2263 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x220E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x32D0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x223A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225E SWAP2 SWAP1 PUSH2 0x2DBD JUMP JUMPDEST PUSH2 0x162D JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2279 JUMPI DUP2 PUSH2 0x1CB0 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22AD DUP5 PUSH2 0x1FAE JUMP JUMPDEST PUSH2 0x22C1 JUMPI PUSH2 0x22BC DUP5 DUP5 DUP5 PUSH2 0x2586 JUMP JUMPDEST PUSH2 0x1F02 JUMP JUMPDEST PUSH2 0x1F02 DUP4 DUP4 PUSH2 0x2593 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x22EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x2389 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2313 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x2354 JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2337 SWAP3 SWAP2 SWAP1 PUSH2 0x3262 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x2380 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2367 SWAP3 SWAP2 SWAP1 PUSH2 0x3262 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x22FC JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x239F DUP4 PUSH2 0x260B JUMP JUMPDEST PUSH2 0x23BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B5F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x23D7 SWAP2 SWAP1 PUSH2 0x3280 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2414 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2419 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2428 DUP3 DUP3 PUSH2 0x2644 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x2005 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2005 SWAP2 SWAP1 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x329C JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x247B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3642 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x24CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x38AF JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x24E5 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x2502 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3A56 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2527 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34A9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2549 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x257C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x352D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F02 DUP5 DUP5 DUP5 PUSH2 0x2651 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x25AF SWAP1 PUSH2 0x32CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x25EC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x25F1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2600 DUP3 DUP3 PUSH2 0x2644 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x1F02 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x163D JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1F02 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x266A SWAP3 SWAP2 SWAP1 PUSH2 0x3485 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2394 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x26AC PUSH2 0x270C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26B9 PUSH2 0x270C JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x162D DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2746 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x275C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x278D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2797 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP5 PUSH1 0x40 DUP6 ADD GT ISZERO PUSH2 0x27AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x27D7 JUMPI DUP2 CALLDATALOAD PUSH2 0x27C2 DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x27AE JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x27F1 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2807 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2830 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x283A PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x284B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2855 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 DUP6 ADD DUP7 DUP2 GT ISZERO PUSH2 0x2868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x288A JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x286B JUMP JUMPDEST POP DUP3 DUP6 MSTORE PUSH2 0x2898 DUP8 DUP3 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28B9 JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28B9 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28B9 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28F3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1CB0 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2910 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x291B DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x292B DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x294A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2955 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2965 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x298A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2995 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x29A5 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x29B5 DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xA0 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29D2 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x29DD DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP2 POP PUSH2 0x29EC DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x281F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A07 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2A12 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A31 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CB0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A51 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A69 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1CB0 DUP4 DUP4 PUSH2 0x281F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A84 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2A8E PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2A9C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2AA6 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x2AB8 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2AD9 JUMPI DUP3 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2ABA JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x2AEB JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x2AF5 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x2B0B JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2B36 JUMPI DUP2 MLOAD PUSH2 0x2B21 DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2B0D JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2B5C JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2B72 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B7E DUP10 DUP4 DUP11 ADD PUSH2 0x28A7 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B93 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B9F DUP10 DUP4 DUP11 ADD PUSH2 0x2735 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2BB7 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2BC4 DUP9 DUP3 DUP10 ADD PUSH2 0x2735 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2BEC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2C02 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C0E DUP10 DUP4 DUP11 ADD PUSH2 0x28A7 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C23 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C2F DUP10 DUP4 DUP11 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C47 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2BC4 DUP9 DUP3 DUP10 ADD PUSH2 0x27E0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A0 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2C69 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2C73 DUP6 DUP6 PUSH2 0x28BF JUMP JUMPDEST SWAP3 POP PUSH2 0x180 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C8E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2C9A DUP7 DUP3 DUP8 ADD PUSH2 0x2735 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1E0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2CC2 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2CCC DUP10 DUP10 PUSH2 0x28BF JUMP JUMPDEST SWAP7 POP PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2CE8 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x2CF4 DUP12 DUP4 DUP13 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x1A0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2D0D JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2D19 DUP12 DUP4 DUP13 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1C0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2D32 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x2D3F DUP11 DUP3 DUP12 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D78 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1F02 DUP5 DUP3 DUP6 ADD PUSH2 0x28D1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2D9B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2DB1 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C0E DUP10 DUP4 DUP11 ADD PUSH2 0x28D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DCE JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2E1F JUMPI DUP2 CALLDATALOAD PUSH2 0x2E04 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2DF1 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2E1F JUMPI PUSH1 0x40 DUP1 DUP4 DUP10 CALLDATACOPY DUP8 DUP2 ADD DUP6 DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP6 SWAP1 JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x2E85 JUMPI DUP3 CALLDATALOAD PUSH2 0x2E68 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP6 ADD PUSH2 0x2E54 JUMP JUMPDEST POP POP POP PUSH1 0x80 SWAP7 DUP8 ADD SWAP7 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2E39 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x2EB3 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x20 DUP4 MUL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2F11 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x40A3 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 PUSH1 0x40 DUP4 DUP2 ADD DUP3 DUP2 MSTORE SWAP1 DUP4 ADD SWAP2 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2F6A JUMPI PUSH1 0x20 DUP4 CALLDATALOAD PUSH2 0x2F4F DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2F39 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 PUSH1 0x20 DUP4 ADD PUSH2 0x2FBB DUP6 PUSH2 0x2FB6 DUP4 DUP8 PUSH2 0x272A JUMP JUMPDEST PUSH2 0x2DD5 JUMP JUMPDEST PUSH2 0x2FC5 DUP2 DUP6 PUSH2 0x3FFC JUMP JUMPDEST SWAP1 POP PUSH2 0x2FD4 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x2FE2 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x2FEF PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x2FFD PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x3010 DUP4 DUP8 ADD DUP3 DUP5 PUSH2 0x2DE2 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x3021 PUSH1 0x80 DUP5 ADD DUP5 PUSH2 0x4050 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x3034 DUP4 DUP3 DUP5 PUSH2 0x2E2A JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x3045 PUSH1 0xA0 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x3058 DUP4 DUP3 DUP5 PUSH2 0x2E9B JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x3069 PUSH1 0xC0 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x307C DUP4 DUP3 DUP5 PUSH2 0x2E9B JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x308D PUSH1 0xE0 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x30A0 DUP4 DUP3 DUP5 PUSH2 0x2E9B JUMP JUMPDEST PUSH2 0x100 DUP7 DUP2 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x120 DUP1 DUP8 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP6 DUP7 ADD CALLDATALOAD SWAP6 SWAP1 SWAP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x30D9 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 PUSH2 0x30FF DUP3 PUSH2 0x40CF JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3112 PUSH1 0x60 DUP3 ADD DUP3 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x311F PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x312D PUSH1 0x80 DUP3 ADD DUP3 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x313A PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x3148 PUSH1 0xA0 DUP3 ADD DUP3 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x3155 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x3166 PUSH1 0xC0 DUP4 ADD PUSH1 0xC0 DUP4 ADD PUSH2 0x2F25 JUMP JUMPDEST PUSH2 0x140 DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH2 0x31A9 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP5 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x31C5 DUP3 PUSH2 0x40CF JUMP JUMPDEST SWAP1 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x31DC DUP3 PUSH2 0x40CF JUMP JUMPDEST DUP1 DUP3 AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x3208 DUP3 PUSH2 0x40CF JUMP JUMPDEST AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD CALLDATASIZE DUP4 SWAP1 SUB PUSH1 0x1E NOT ADD DUP2 SLT PUSH2 0x3225 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x323C JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x324A JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xE0 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x2005 PUSH1 0xE0 DUP7 ADD DUP3 PUSH1 0x20 DUP6 ADD PUSH2 0x2ECF JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3292 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x40A3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3308 SWAP1 DUP4 ADD DUP6 PUSH2 0x2F9F JUMP JUMPDEST SWAP1 POP PUSH2 0x1F02 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x333C DUP4 DUP3 ADD DUP9 PUSH2 0x2F9F JUMP JUMPDEST SWAP1 POP PUSH2 0x334B PUSH1 0x40 DUP5 ADD DUP8 PUSH2 0x2F71 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x335E DUP2 DUP6 DUP8 PUSH2 0x2DE2 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH2 0x200 DUP2 ADD PUSH2 0x3388 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30CE JUMP JUMPDEST PUSH2 0x1F02 PUSH2 0x1A0 DUP4 ADD DUP5 PUSH2 0x317D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x0 PUSH2 0x2C0 PUSH1 0x20 PUSH2 0x33B5 DUP2 DUP6 ADD DUP13 PUSH2 0x30CE JUMP JUMPDEST PUSH2 0x33C3 PUSH2 0x1A0 DUP6 ADD DUP12 PUSH2 0x317D JUMP JUMPDEST DUP2 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x33D7 DUP3 DUP6 ADD DUP10 DUP12 PUSH2 0x2ECF JUMP JUMPDEST SWAP2 POP DUP4 DUP3 SUB PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x33ED DUP3 DUP8 DUP10 PUSH2 0x2ECF JUMP JUMPDEST DUP6 MLOAD SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x0 PUSH2 0x240 DUP6 ADD JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x341B JUMPI DUP4 MLOAD DUP2 MSTORE SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP3 ADD PUSH2 0x33FC JUMP JUMPDEST POP POP DUP1 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x280 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x3450 JUMPI PUSH2 0x343E DUP5 MLOAD PUSH2 0x4097 JUMP JUMPDEST DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x342B JUMP JUMPDEST POP POP POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x34DA PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x2EF9 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x34ED DUP2 DUP8 DUP10 PUSH2 0x2ECF JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x335E DUP2 DUP6 DUP8 PUSH2 0x2ECF JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x3510 JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1CB0 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2EF9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C5F PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x9082A69 PUSH1 0xE3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E4445585F4D49534D415443480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A204348414E4E454C5F4D49534D41544348000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x434D4357697468647261773A204E4F5F4F5 PUSH1 0x74 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5048415345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4E4F4E4345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F424F425F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D111519553911151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204E4F5F4153534554535F474956454E00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204348414E4E454C5F414C52454144595F PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1111519553911151 PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F424F425F53494700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20414C52454144595F4558454355544544000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F4E4F545F444953 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1415551151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4D45524B4C455F50 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x2927A7A3 PUSH1 0xE1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F414C4943455F5349470000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D11254D415551151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A2057524F4E475F41525241595F4C454E47 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x544853 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F414C4943455F5349 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x47 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5245534F4C564552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F42414C414E434553 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0xBE9082A69 PUSH1 0xDB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x162D DUP3 DUP5 PUSH2 0x2F25 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1CB0 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2F9F JUMP JUMPDEST PUSH2 0x180 DUP2 ADD PUSH2 0x162D DUP3 DUP5 PUSH2 0x30CE JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1CB0 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x319C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x3F32 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x319C JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3F60 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3F79 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP2 ADD SWAP3 POP DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3FA6 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3FBF JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3FF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x1CB0 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x401F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x403E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4066 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4085 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40BE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x40A6 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1FA8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x40E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x279B4C261127B0AD7885A389DE95 REVERT PUSH2 0xD8C5 EXTCODEHASH STATICCALL SGT SWAP7 STATICCALL 0xC6 STOP BYTE DIFFICULTY TIMESTAMP INVALID ORIGIN SHL PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "886:431:41:-:0;;;;;;;;;;;;-1:-1:-1;867:4:12;839:33;;;;;;886:431:41;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "2595": [
                  {
                    "length": 32,
                    "start": 318
                  },
                  {
                    "length": 32,
                    "start": 1137
                  },
                  {
                    "length": 32,
                    "start": 2077
                  },
                  {
                    "length": 32,
                    "start": 2200
                  },
                  {
                    "length": 32,
                    "start": 2764
                  },
                  {
                    "length": 32,
                    "start": 3050
                  },
                  {
                    "length": 32,
                    "start": 3219
                  },
                  {
                    "length": 32,
                    "start": 4508
                  },
                  {
                    "length": 32,
                    "start": 4881
                  },
                  {
                    "length": 32,
                    "start": 5241
                  },
                  {
                    "length": 32,
                    "start": 5572
                  },
                  {
                    "length": 32,
                    "start": 5710
                  },
                  {
                    "length": 32,
                    "start": 5858
                  },
                  {
                    "length": 32,
                    "start": 5990
                  },
                  {
                    "length": 32,
                    "start": 6506
                  },
                  {
                    "length": 32,
                    "start": 6643
                  },
                  {
                    "length": 32,
                    "start": 6780
                  },
                  {
                    "length": 32,
                    "start": 6933
                  },
                  {
                    "length": 32,
                    "start": 7064
                  }
                ]
              },
              "linkReferences": {},
              "object": "60806040526004361061012e5760003560e01c80637b037295116100ab578063cefa51221161006f578063cefa5122146103ba578063e7283a8d146103da578063e9852569146103fa578063eeb30fea1461041a578063f19eb10e1461042f578063f83d08ba14610451576101ae565b80637b0372951461030d5780638c048fc21461032d578063b081e9c81461035a578063c55e1dac1461037a578063c60939be1461039a576101ae565b80634d3fcbda116100f25780634d3fcbda1461026d5780635bc9d96d1461028d5780635fd334d9146102ad578063635ae901146102cd5780636f33389e146102e0576101ae565b8063072f25fd146101b3578063241686a0146101d55780632c889aa1146102005780632d34ba79146102205780633ff0da1614610240576101ae565b366101ae57306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156101855760405162461bcd60e51b815260040161017c90613dce565b60405180910390fd5b6001600054146101a75760405162461bcd60e51b815260040161017c90613b8a565b6001600055005b600080fd5b3480156101bf57600080fd5b506101d36101ce366004612ca7565b610466565b005b3480156101e157600080fd5b506101ea610810565b6040516101f791906132d0565b60405180910390f35b34801561020c57600080fd5b506101d361021b366004612d84565b61088d565b34801561022c57600080fd5b506101d361023b3660046128fe565b610ac1565b34801561024c57600080fd5b5061026061025b366004612a40565b610bd7565b6040516101f79190613ee9565b34801561027957600080fd5b506101d3610288366004612b45565b610c88565b34801561029957600080fd5b506101d36102a8366004612976565b611191565b3480156102b957600080fd5b506101d36102c8366004612c54565b611306565b6101d36102db3660046129f5565b61146e565b3480156102ec57600080fd5b506103006102fb3660046128e2565b6115b7565b6040516101f79190613f41565b34801561031957600080fd5b506101d36103283660046129c0565b611633565b34801561033957600080fd5b5061034d610348366004612d52565b611641565b6040516101f7919061349e565b34801561036657600080fd5b506103006103753660046128e2565b6116d5565b34801561038657600080fd5b506101d3610395366004612936565b61174b565b3480156103a657600080fd5b506101d36103b5366004612bd5565b61175b565b3480156103c657600080fd5b506103006103d53660046128e2565b61195d565b3480156103e657600080fd5b506103006103f53660046128e2565b6119e6565b34801561040657600080fd5b506103006104153660046128fe565b611a6f565b34801561042657600080fd5b506101ea611b08565b34801561043b57600080fd5b50610444611b85565b6040516101f79190613e8d565b34801561045d57600080fd5b50610300611c2d565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104af5760405162461bcd60e51b815260040161017c90613dce565b6001600054146104d15760405162461bcd60e51b815260040161017c90613b8a565b600260005586306104e560208301836128e2565b6001600160a01b03161461050b5760405162461bcd60e51b815260040161017c906136b0565b6020808901356000908152600d9091526040902060018101546105405760405162461bcd60e51b815260040161017c90613ad9565b805461054b8a611c33565b146105685760405162461bcd60e51b815260040161017c90613e3a565b600281015460ff161561058d5760405162461bcd60e51b815260040161017c906137f8565b60028101805460ff191660011790556105a4612699565b816001015442101561078c5789610160013589896040516105c6929190613270565b6040518091039020146105eb5760405162461bcd60e51b815260040161017c90613e3a565b6105fb60a08b0160808c016128e2565b6001600160a01b0316336001600160a01b0316148061066c575061066c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065f9250505060a08d0160808e016128e2565b6101608d01359190611c63565b6106885760405162461bcd60e51b815260040161017c90613d99565b600061069a60608c0160408d016128e2565b9050806001600160a01b0316638ef98a7e8c60c0016040516020016106bf9190613e7f565b6040516020818303038152906040528c8c8c8c6040518663ffffffff1660e01b81526004016106f29594939291906134c7565b60806040518083038186803b15801561070a57600080fd5b505afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190612a73565b915061075660c08c013560e08d0135611c8b565b82516020810151905161076891611c8b565b11156107865760405162461bcd60e51b815260040161017c90613e05565b506107a1565b61079e368b90038b0160c08c01612a58565b90505b6107ba6107b460c08c0160a08d016128e2565b82611cb7565b7f93f6b8187e81bd7d01ce234c043cd6ae4feda2e2ae91daae0962c68a656da8c7338b848c8c8c8c886040516107f7989796959493929190613396565b60405180910390a1505060016000555050505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561085b5760405162461bcd60e51b815260040161017c90613dce565b60016000541461087d5760405162461bcd60e51b815260040161017c90613b8a565b506002546001600160a01b031690565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108d65760405162461bcd60e51b815260040161017c90613dce565b6001600054146108f85760405162461bcd60e51b815260040161017c90613b8a565b6002600055843061090c60208301836128e2565b6001600160a01b0316146109325760405162461bcd60e51b815260040161017c906135df565b600061093d87611d08565b905061094c8187878787611d1b565b60008181526006602052604090205460ff161561097b5760405162461bcd60e51b815260040161017c906139e8565b6000818152600660209081526040808320805460ff191660011790556109b3916109a9918b01908b016128e2565b8960600135611e25565b905060008111806109dd575060006109d160c08a0160a08b016128e2565b6001600160a01b031614155b6109f95760405162461bcd60e51b815260040161017c90613616565b610a22610a0c60408a0160208b016128e2565b610a1c60608b0160408c016128e2565b83611e39565b6000610a3460c08a0160a08b016128e2565b6001600160a01b031614610ab257610a5260c0890160a08a016128e2565b6001600160a01b031663f50cd32c89836040518363ffffffff1660e01b8152600401610a7f929190613f1f565b600060405180830381600087803b158015610a9957600080fd5b505af1158015610aad573d6000803e3d6000fd5b505050505b50506001600055505050505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610b0a5760405162461bcd60e51b815260040161017c90613dce565b6001546001600160a01b031615610b335760405162461bcd60e51b815260040161017c90613ce5565b6001600160a01b03821615801590610b5357506001600160a01b03811615155b610b6f5760405162461bcd60e51b815260040161017c90613970565b806001600160a01b0316826001600160a01b03161415610ba15760405162461bcd60e51b815260040161017c906136e5565b610ba9611e6a565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b610bdf6126be565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610c285760405162461bcd60e51b815260040161017c90613dce565b600160005414610c4a5760405162461bcd60e51b815260040161017c90613b8a565b506000908152600d60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610cd15760405162461bcd60e51b815260040161017c90613dce565b600160005414610cf35760405162461bcd60e51b815260040161017c90613b8a565b60026000558430610d0760208301836128e2565b6001600160a01b0316148015610d3f57506001546001600160a01b0316610d3460408301602084016128e2565b6001600160a01b0316145b8015610d6d57506002546001600160a01b0316610d6260608301604084016128e2565b6001600160a01b0316145b610d895760405162461bcd60e51b815260040161017c90613878565b83610da65760405162461bcd60e51b815260040161017c90613841565b83821115610dc65760405162461bcd60e51b815260040161017c90613d15565b600754610dd287611e71565b14610def5760405162461bcd60e51b815260040161017c90613564565b610df7611e84565b610e135760405162461bcd60e51b815260040161017c90613679565b60005b84811015611143576000868683818110610e2c57fe5b9050602002016020810190610e4191906128e2565b9050600084831015610ec657858584818110610e5957fe5b905060200201359050888060600190610e729190613f4a565b82818110610e7c57fe5b9050602002016020810190610e9191906128e2565b6001600160a01b0316826001600160a01b031614610ec15760405162461bcd60e51b815260040161017c906135a8565b610f32565b5060005b610ed760608a018a613f4a565b9050811015610f3257610eed60608a018a613f4a565b82818110610ef757fe5b9050602002016020810190610f0c91906128e2565b6001600160a01b0316826001600160a01b03161415610f2a57610f32565b600101610eca565b6000610f4160608b018b613f4a565b90508214610f6c57610f5660e08b018b613f4a565b83818110610f6057fe5b90506020020135610f6f565b60015b6001600160a01b0384166000908152600c60205260409020549091508111610fa95760405162461bcd60e51b815260040161017c906138f1565b6001600160a01b0383166000908152600c6020526040812091909155610fce83611ea1565b90506000610fdb84611ebc565b9050610fe5612699565b610ff260608d018d613f4a565b905084141561107c576040518060400160405280604051806040016040528086815260200185815250815260200160405180604001604052808f602001602081019061103e91906128e2565b6001600160a01b03166001600160a01b031681526020018f604001602081019061106891906128e2565b6001600160a01b0316905290529050611128565b61108960808d018d613f90565b8581811061109357fe5b9050608002018036038101906110a99190612a58565b90506110ea6110bb60a08e018e613f4a565b868181106110c557fe5b90506020020135840382600001516000600281106110df57fe5b602002015190611ef1565b8151526111216110fd60c08e018e613f4a565b8681811061110757fe5b90506020020135830382600001516001600281106110df57fe5b8151602001525b6111328582611cb7565b505060019093019250610e16915050565b507f49cbb28c69ffbdb6b3893f83d64557662a5dd43ffd6045b6a5180ab0a027f22433876007888860405161117c959493929190613317565b60405180910390a15050600160005550505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111da5760405162461bcd60e51b815260040161017c90613dce565b6001600054146111fc5760405162461bcd60e51b815260040161017c90613b8a565b6002600055336001600160a01b03831614806112295750806001600160a01b0316826001600160a01b0316145b6112455760405162461bcd60e51b815260040161017c90613cae565b6001600160a01b038084166000908152600460209081526040808320938616835292905290812054611278908590611e25565b90506000811161129a5760405162461bcd60e51b815260040161017c90613c05565b6001600160a01b038085166000908152600460209081526040808320938716835292905220546112ca9082611f0a565b6001600160a01b038086166000908152600460209081526040808320938816835292905220556112fb848383611e39565b505060016000555050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561134f5760405162461bcd60e51b815260040161017c90613dce565b6001600054146113715760405162461bcd60e51b815260040161017c90613b8a565b6002600055823061138560208301836128e2565b6001600160a01b0316146113ab5760405162461bcd60e51b815260040161017c906136b0565b60006113b685611c33565b90506113c9848460076002015484611f4c565b6113d1611e84565b6113ed5760405162461bcd60e51b815260040161017c90613679565b6020808601356000908152600d909152604090206001810154156114235760405162461bcd60e51b815260040161017c90613c65565b81815561143542610140880135611c8b565b60018201556040517f87b348a76dd4ef431d45553a1d8c5934db960e64201a5776ab64e3eb397f4cfa9061117c9033908990859061336a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114b75760405162461bcd60e51b815260040161017c90613dce565b6001600054146114d95760405162461bcd60e51b815260040161017c90613b8a565b60026000556114e782611fae565b156115105780341461150b5760405162461bcd60e51b815260040161017c90613a1f565b611556565b341561152e5760405162461bcd60e51b815260040161017c90613a98565b61153a82333084611fbb565b6115565760405162461bcd60e51b815260040161017c906139a7565b6001600160a01b03821660009081526005602052604090819020805483019055517fb52926ac8ed62d53d4b88d81b71c48639bd63aa53950fcf3e1d7676ca7c26140906115a69084908490613485565b60405180910390a150506001600055565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116025760405162461bcd60e51b815260040161017c90613dce565b6001600054146116245760405162461bcd60e51b815260040161017c90613b8a565b61162d82611ea1565b92915050565b61163d8282611cb7565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561168c5760405162461bcd60e51b815260040161017c90613dce565b6001600054146116ae5760405162461bcd60e51b815260040161017c90613b8a565b600660006116bb84611d08565b815260208101919091526040016000205460ff1692915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117205760405162461bcd60e51b815260040161017c90613dce565b6001600054146117425760405162461bcd60e51b815260040161017c90613b8a565b61162d82611ebc565b61175683838361200e565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117a45760405162461bcd60e51b815260040161017c90613dce565b6001600054146117c65760405162461bcd60e51b815260040161017c90613b8a565b600260005584306117da60208301836128e2565b6001600160a01b031614801561181257506001546001600160a01b031661180760408301602084016128e2565b6001600160a01b0316145b801561184057506002546001600160a01b031661183560608301604084016128e2565b6001600160a01b0316145b61185c5760405162461bcd60e51b815260040161017c90613878565b600061186787611e71565b905061187787828888888861206f565b61187f611e84565b1561189c5760405162461bcd60e51b815260040161017c90613679565b600854610120880135116118c25760405162461bcd60e51b815260040161017c9061371c565b6118ca612179565b6118fe576118dd42610100890135611c8b565b600a556118fa6118f36101008901356002612181565b4290611c8b565b600b555b60078181556101208801356008556101408801356009556040517fef03cf86f2e77e1a0ae5cb25b50519e55b94788b920ace71f92341df2dab97ed916119479133918b916132e4565b60405180910390a1505060016000555050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156119a85760405162461bcd60e51b815260040161017c90613dce565b6001600054146119ca5760405162461bcd60e51b815260040161017c90613b8a565b506001600160a01b031660009081526003602052604090205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611a315760405162461bcd60e51b815260040161017c90613dce565b600160005414611a535760405162461bcd60e51b815260040161017c90613b8a565b506001600160a01b03166000908152600c602052604090205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611aba5760405162461bcd60e51b815260040161017c90613dce565b600160005414611adc5760405162461bcd60e51b815260040161017c90613b8a565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611b535760405162461bcd60e51b815260040161017c90613dce565b600160005414611b755760405162461bcd60e51b815260040161017c90613b8a565b506001546001600160a01b031690565b611b8d6126de565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611bd65760405162461bcd60e51b815260040161017c90613dce565b600160005414611bf85760405162461bcd60e51b815260040161017c90613b8a565b506040805160a0810182526007548152600854602082015260095491810191909152600a546060820152600b54608082015290565b60005481565b600081604051602001611c469190613eda565b604051602081830303815290604052805190602001209050919050565b6000816001600160a01b0316611c7985856121bb565b6001600160a01b031614949350505050565b600082820183811015611cb05760405162461bcd60e51b815260040161017c906137c1565b9392505050565b60005b60028110156117565781516000908260028110611cd357fe5b602002015190508015611cff57611cff8484602001518460028110611cf457fe5b60200201518361200e565b50600101611cba565b600081604051602001611c469190613f0c565b6000600186604051602001611d31929190613502565b604051602081830303815290604052805190602001209050611d9785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600154859392506001600160a01b03169050611c63565b611db35760405162461bcd60e51b815260040161017c90613c2e565b611e0183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600254859392506001600160a01b03169050611c63565b611e1d5760405162461bcd60e51b815260040161017c90613939565b505050505050565b6000611cb082611e34856121d3565b61226a565b611e438382612280565b611e4e8383836122a2565b6117565760405162461bcd60e51b815260040161017c90613753565b6001600055565b600081604051602001611c469190613ec7565b60004260076003015411158015611e9c5750600b5442105b905090565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b0381166000908152600560209081526040808320546003909252822054611ee9846121d3565b010392915050565b600082820183811015611cb0576000195b949350505050565b6000611cb083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122cb565b611f8c8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508692508591506122f79050565b611fa85760405162461bcd60e51b815260040161017c90613bc1565b50505050565b6001600160a01b03161590565b600061200585858585604051602401611fd693929190613461565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052612394565b95945050505050565b6001600160a01b0380841660009081526004602090815260408083209386168352929052205461203e9082611ef1565b6001600160a01b03938416600090815260046020908152604080832095909616825293909352929091209190915550565b60008086604051602001612084929190613502565b6040516020818303038152906040528051906020012090506120ee85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120e69250505060408a0160208b016128e2565b839190611c63565b61210a5760405162461bcd60e51b815260040161017c90613d58565b61215483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120e69250505060608a0160408b016128e2565b6121705760405162461bcd60e51b815260040161017c9061378a565b50505050505050565b600a54421090565b6000826121905750600061162d565b8282028284828161219d57fe5b0414611cb05760405162461bcd60e51b815260040161017c90613b1e565b6000806121c784612445565b9050611f028184612458565b60006121de82611fae565b612263576040516370a0823160e01b81526001600160a01b038316906370a082319061220e9030906004016132d0565b60206040518083038186803b15801561222657600080fd5b505afa15801561223a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225e9190612dbd565b61162d565b5047919050565b60008183106122795781611cb0565b5090919050565b6001600160a01b03909116600090815260036020526040902080549091019055565b60006122ad84611fae565b6122c1576122bc848484612586565b611f02565b611f028383612593565b600081848411156122ef5760405162461bcd60e51b815260040161017c919061351a565b505050900390565b600081815b855181101561238957600086828151811061231357fe5b60200260200101519050808311612354578281604051602001612337929190613262565b604051602081830303815290604052805190602001209250612380565b8083604051602001612367929190613262565b6040516020818303038152906040528051906020012092505b506001016122fc565b509092149392505050565b600061239f8361260b565b6123bb5760405162461bcd60e51b815260040161017c90613b5f565b60006060846001600160a01b0316846040516123d79190613280565b6000604051808303816000865af19150503d8060008114612414576040519150601f19603f3d011682016040523d82523d6000602084013e612419565b606091505b50915091506124288282612644565b805115806120055750808060200190518101906120059190612a20565b600081604051602001611c46919061329c565b6000815160411461247b5760405162461bcd60e51b815260040161017c90613642565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156124cd5760405162461bcd60e51b815260040161017c906138af565b8060ff16601b141580156124e557508060ff16601c14155b156125025760405162461bcd60e51b815260040161017c90613a56565b60006001878386866040516000815260200160405260405161252794939291906134a9565b6020604051602081039080840390855afa158015612549573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661257c5760405162461bcd60e51b815260040161017c9061352d565b9695505050505050565b6000611f02848484612651565b6000806060846001600160a01b0316846040516125af906132cd565b60006040518083038185875af1925050503d80600081146125ec576040519150601f19603f3d011682016040523d82523d6000602084013e6125f1565b606091505b50915091506126008282612644565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611f02575050151592915050565b8161163d57805160208201fd5b6000611f0284848460405160240161266a929190613485565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052612394565b60405180604001604052806126ac61270c565b81526020016126b961270c565b905290565b604080516060810182526000808252602082018190529181019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806002906020820280368337509192915050565b803561162d816140cf565b60008083601f840112612746578182fd5b5081356001600160401b0381111561275c578182fd5b602083019150836020808302850101111561277657600080fd5b9250929050565b600082601f83011261278d578081fd5b6127976040613fd6565b90508082846040850111156127ab57600080fd5b60005b60028110156127d75781356127c2816140cf565b835260209283019291909101906001016127ae565b50505092915050565b60008083601f8401126127f1578182fd5b5081356001600160401b03811115612807578182fd5b60208301915083602082850101111561277657600080fd5b600060808284031215612830578081fd5b61283a6040613fd6565b905082601f83011261284b57600080fd5b6128556040613fd6565b8083604085018681111561286857600080fd5b60005b600281101561288a57823585526020948501949092019160010161286b565b50828552612898878261277d565b60208601525050505092915050565b600061016082840312156128b9578081fd5b50919050565b600061018082840312156128b9578081fd5b600060e082840312156128b9578081fd5b6000602082840312156128f3578081fd5b8135611cb0816140cf565b60008060408385031215612910578081fd5b823561291b816140cf565b9150602083013561292b816140cf565b809150509250929050565b60008060006060848603121561294a578081fd5b8335612955816140cf565b92506020840135612965816140cf565b929592945050506040919091013590565b60008060006060848603121561298a578081fd5b8335612995816140cf565b925060208401356129a5816140cf565b915060408401356129b5816140cf565b809150509250925092565b60008060a083850312156129d2578182fd5b82356129dd816140cf565b91506129ec846020850161281f565b90509250929050565b60008060408385031215612a07578182fd5b8235612a12816140cf565b946020939093013593505050565b600060208284031215612a31578081fd5b81518015158114611cb0578182fd5b600060208284031215612a51578081fd5b5035919050565b600060808284031215612a69578081fd5b611cb0838361281f565b600060808284031215612a84578081fd5b612a8e6040613fd6565b83601f840112612a9c578182fd5b612aa66040613fd6565b80846040860187811115612ab8578586fd5b855b6002811015612ad9578251855260209485019490920191600101612aba565b5082855287605f880112612aeb578586fd5b612af56040613fd6565b9350839250905060808601871015612b0b578485fd5b845b6002811015612b36578151612b21816140cf565b84526020938401939190910190600101612b0d565b50506020830152509392505050565b600080600080600060608688031215612b5c578283fd5b85356001600160401b0380821115612b72578485fd5b612b7e89838a016128a7565b96506020880135915080821115612b93578485fd5b612b9f89838a01612735565b90965094506040880135915080821115612bb7578283fd5b50612bc488828901612735565b969995985093965092949392505050565b600080600080600060608688031215612bec578283fd5b85356001600160401b0380821115612c02578485fd5b612c0e89838a016128a7565b96506020880135915080821115612c23578485fd5b612c2f89838a016127e0565b90965094506040880135915080821115612c47578283fd5b50612bc4888289016127e0565b60008060006101a08486031215612c69578081fd5b612c7385856128bf565b92506101808401356001600160401b03811115612c8e578182fd5b612c9a86828701612735565b9497909650939450505050565b60008060008060008060006101e0888a031215612cc2578485fd5b612ccc89896128bf565b96506101808801356001600160401b0380821115612ce8578687fd5b612cf48b838c016127e0565b90985096506101a08a0135915080821115612d0d578384fd5b612d198b838c016127e0565b90965094506101c08a0135915080821115612d32578384fd5b50612d3f8a828b016127e0565b989b979a50959850939692959293505050565b600060208284031215612d63578081fd5b81356001600160401b03811115612d78578182fd5b611f02848285016128d1565b600080600080600060608688031215612d9b578283fd5b85356001600160401b0380821115612db1578485fd5b612c0e89838a016128d1565b600060208284031215612dce578081fd5b5051919050565b6001600160a01b03169052565b60008284526020808501945082825b85811015612e1f578135612e04816140cf565b6001600160a01b031687529582019590820190600101612df1565b509495945050505050565b60008284526020808501945082825b85811015612e1f576040808389378781018581529083019085905b6002821015612e85578235612e68816140cf565b6001600160a01b0316815291850191600191909101908501612e54565b5050506080968701969190910190600101612e39565b81835260006001600160fb1b03831115612eb3578081fd5b6020830280836020870137939093016020019283525090919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612f118160208601602086016140a3565b601f01601f19169290920160200192915050565b604081833760006040838101828152908301915b6002811015612f6a5760208335612f4f816140cf565b6001600160a01b031683529283019290910190600101612f39565b5050505050565b8054825260018101546020830152600281015460408301526003810154606083015260040154608090910152565b600061016060208301612fbb85612fb6838761272a565b612dd5565b612fc58185613ffc565b9050612fd46020860182612dd5565b50612fe26040840184613ffc565b612fef6040860182612dd5565b50612ffd6060840184614009565b8260608701526130108387018284612de2565b925050506130216080840184614050565b8583036080870152613034838284612e2a565b9250505061304560a0840184614009565b85830360a0870152613058838284612e9b565b9250505061306960c0840184614009565b85830360c087015261307c838284612e9b565b9250505061308d60e0840184614009565b85830360e08701526130a0838284612e9b565b6101008681013590880152610120808701359088015261014095860135959096019490945250929392505050565b80356130d9816140cf565b6001600160a01b039081168352602082810135908401526040820135906130ff826140cf565b1660408301526131126060820182613ffc565b61311f6060840182612dd5565b5061312d6080820182613ffc565b61313a6080840182612dd5565b5061314860a0820182613ffc565b61315560a0840182612dd5565b5061316660c0830160c08301612f25565b610140818101359083015261016090810135910152565b80548252600181015460208301526002015460ff161515604090910152565b600081356131a9816140cf565b6001600160a01b0390811684526020830135906131c5826140cf565b90811660208501526040830135906131dc826140cf565b8082166040860152606084013560608601526080840135608086015260a08401359150613208826140cf565b1660a084015260c082013536839003601e19018112613225578182fd5b820180356001600160401b0381111561323c578283fd5b80360384131561324a578283fd5b60e060c086015261200560e086018260208501612ecf565b918252602082015260400190565b6000828483379101908152919050565b600082516132928184602087016140a3565b9190910192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260e06020820181905260009061330890830185612f9f565b9050611f026040830184612f71565b6001600160a01b03861681526101006020820181905260009061333c83820188612f9f565b905061334b6040840187612f71565b82810360e084015261335e818587612de2565b98975050505050505050565b6001600160a01b0384168152610200810161338860208301856130ce565b611f026101a083018461317d565b6001600160a01b038916815260006102c060206133b58185018c6130ce565b6133c36101a085018b61317d565b816102008501526133d7828501898b612ecf565b91508382036102208501526133ed828789612ecf565b85519093509150600061024085015b600282101561341b5783518152928201926001919091019082016133fc565b5050808501519150610280840160005b60028110156134505761343e8451614097565b8252928201929082019060010161342b565b505050509998505050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000606082526134da6060830188612ef9565b82810360208401526134ed818789612ecf565b9050828103604084015261335e818587612ecf565b604081016002841061351057fe5b9281526020015290565b600060208252611cb06020830184612ef9565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f60408201526309082a6960e31b606082015260800190565b6020808252601e908201527f434d4341646a7564696361746f723a20494e4445585f4d49534d415443480000604082015260600190565b6020808252601d908201527f434d4357697468647261773a204348414e4e454c5f4d49534d41544348000000604082015260600190565b6020808252601290820152710434d4357697468647261773a204e4f5f4f560741b604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f5048415345000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552604082015260600190565b6020808252601f908201527f434d43436f72653a204944454e544943414c5f5041525449434950414e545300604082015260600190565b6020808252601d908201527f434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345000000604082015260600190565b60208082526019908201527f434d4341737365743a205452414e534645525f4641494c454400000000000000604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f424f425f53494700604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11151955391115160ba1b606082015260800190565b6020808252601f908201527f434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e00604082015260600190565b6020808252601f908201527f434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c00604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526028908201527f434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f604082015267111151955391115160c21b606082015260800190565b6020808252601c908201527f434d4357697468647261773a20494e56414c49445f424f425f53494700000000604082015260600190565b6020808252601c908201527f434d43436f72653a20494e56414c49445f5041525449434950414e5400000000604082015260600190565b60208082526021908201527f434d434465706f7369743a2045524332305f5452414e534645525f4641494c456040820152601160fa1b606082015260800190565b6020808252601d908201527f434d4357697468647261773a20414c52454144595f4558454355544544000000604082015260600190565b6020808252601a908201527f434d434465706f7369743a2056414c55455f4d49534d41544348000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526021908201527f434d434465706f7369743a204554485f574954485f4552435f5452414e5346456040820152602960f91b606082015260800190565b60208082526025908201527f434d4341646a7564696361746f723a205452414e534645525f4e4f545f444953604082015264141555115160da1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a205245454e5452414e545f43414c4c00604082015260600190565b60208082526024908201527f434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f506040820152632927a7a360e11b606082015260800190565b6020808252600f908201526e0434d4341737365743a204e4f5f4f5608c1b604082015260600190565b6020808252601e908201527f434d4357697468647261773a20494e56414c49445f414c4943455f5349470000604082015260600190565b60208082526029908201527f434d4341646a7564696361746f723a205452414e534645525f414c524541445960408201526817d11254d41555115160ba1b606082015260800190565b60208082526018908201527f434d4341737365743a204f574e45525f4d49534d415443480000000000000000604082015260600190565b6020808252601690820152750434d43436f72653a20414c52454144595f53455455560541b604082015260600190565b60208082526023908201527f434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e4760408201526254485360e81b606082015260800190565b60208082526021908201527f434d4341646a7564696361746f723a20494e56414c49445f414c4943455f53496040820152604760f81b606082015260800190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552604082015260600190565b6020808252601a908201527f4d6173746572636f70793a204f4e4c595f5649415f50524f5859000000000000604082015260600190565b6020808252818101527f434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553604082015260600190565b60208082526025908201527f434d4341646a7564696361746f723a20494e56414c49445f5452414e534645526040820152640be9082a6960db1b606082015260800190565b6080810161162d8284612f25565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b600060208252611cb06020830184612f9f565b610180810161162d82846130ce565b815181526020808301519082015260409182015115159181019190915260600190565b600060208252611cb0602083018461319c565b600060408252613f32604083018561319c565b90508260208301529392505050565b90815260200190565b6000808335601e19843603018112613f60578283fd5b8301803591506001600160401b03821115613f79578283fd5b602090810192508102360382131561277657600080fd5b6000808335601e19843603018112613fa6578283fd5b8301803591506001600160401b03821115613fbf578283fd5b602001915060808102360382131561277657600080fd5b6040518181016001600160401b0381118282101715613ff457600080fd5b604052919050565b60008235611cb0816140cf565b6000808335601e1984360301811261401f578283fd5b83016020810192503590506001600160401b0381111561403e57600080fd5b60208102360383131561277657600080fd5b6000808335601e19843603018112614066578283fd5b83016020810192503590506001600160401b0381111561408557600080fd5b60808102360383131561277657600080fd5b6001600160a01b031690565b60005b838110156140be5781810151838201526020016140a6565b83811115611fa85750506000910152565b6001600160a01b03811681146140e457600080fd5b5056fea26469706673582212206d279b4c261127b0ad7885a389de95fd61d8c53ffa1396fac6001a4442fe321b64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B037295 GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xCEFA5122 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xCEFA5122 EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0xE7283A8D EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0xE9852569 EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0xEEB30FEA EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0xF19EB10E EQ PUSH2 0x42F JUMPI DUP1 PUSH4 0xF83D08BA EQ PUSH2 0x451 JUMPI PUSH2 0x1AE JUMP JUMPDEST DUP1 PUSH4 0x7B037295 EQ PUSH2 0x30D JUMPI DUP1 PUSH4 0x8C048FC2 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0xB081E9C8 EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0xC55E1DAC EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0xC60939BE EQ PUSH2 0x39A JUMPI PUSH2 0x1AE JUMP JUMPDEST DUP1 PUSH4 0x4D3FCBDA GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x4D3FCBDA EQ PUSH2 0x26D JUMPI DUP1 PUSH4 0x5BC9D96D EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x5FD334D9 EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x635AE901 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x6F33389E EQ PUSH2 0x2E0 JUMPI PUSH2 0x1AE JUMP JUMPDEST DUP1 PUSH4 0x72F25FD EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x241686A0 EQ PUSH2 0x1D5 JUMPI DUP1 PUSH4 0x2C889AA1 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x2D34BA79 EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0x3FF0DA16 EQ PUSH2 0x240 JUMPI PUSH2 0x1AE JUMP JUMPDEST CALLDATASIZE PUSH2 0x1AE JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0x2CA7 JUMP JUMPDEST PUSH2 0x466 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EA PUSH2 0x810 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x32D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x2D84 JUMP JUMPDEST PUSH2 0x88D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x23B CALLDATASIZE PUSH1 0x4 PUSH2 0x28FE JUMP JUMPDEST PUSH2 0xAC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x260 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x2A40 JUMP JUMPDEST PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x3EE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x288 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B45 JUMP JUMPDEST PUSH2 0xC88 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2976 JUMP JUMPDEST PUSH2 0x1191 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x2C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C54 JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST PUSH2 0x1D3 PUSH2 0x2DB CALLDATASIZE PUSH1 0x4 PUSH2 0x29F5 JUMP JUMPDEST PUSH2 0x146E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x15B7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x3F41 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x328 CALLDATASIZE PUSH1 0x4 PUSH2 0x29C0 JUMP JUMPDEST PUSH2 0x1633 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x348 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D52 JUMP JUMPDEST PUSH2 0x1641 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x349E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x375 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x16D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x2936 JUMP JUMPDEST PUSH2 0x174B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH2 0x3B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BD5 JUMP JUMPDEST PUSH2 0x175B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x195D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x3F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x19E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x415 CALLDATASIZE PUSH1 0x4 PUSH2 0x28FE JUMP JUMPDEST PUSH2 0x1A6F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EA PUSH2 0x1B08 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x444 PUSH2 0x1B85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0x3E8D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH2 0x1C2D JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x4D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP7 ADDRESS PUSH2 0x4E5 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x50B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x540 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3AD9 JUMP JUMPDEST DUP1 SLOAD PUSH2 0x54B DUP11 PUSH2 0x1C33 JUMP JUMPDEST EQ PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3E3A JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x58D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x37F8 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x5A4 PUSH2 0x2699 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x78C JUMPI DUP10 PUSH2 0x160 ADD CALLDATALOAD DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0x5C6 SWAP3 SWAP2 SWAP1 PUSH2 0x3270 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 EQ PUSH2 0x5EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3E3A JUMP JUMPDEST PUSH2 0x5FB PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x66C JUMPI POP PUSH2 0x66C DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x65F SWAP3 POP POP POP PUSH1 0xA0 DUP14 ADD PUSH1 0x80 DUP15 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x160 DUP14 ADD CALLDATALOAD SWAP2 SWAP1 PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x688 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3D99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69A PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x28E2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8EF98A7E DUP13 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x6BF SWAP2 SWAP1 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP13 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6F2 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34C7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x71E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x742 SWAP2 SWAP1 PUSH2 0x2A73 JUMP JUMPDEST SWAP2 POP PUSH2 0x756 PUSH1 0xC0 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP14 ADD CALLDATALOAD PUSH2 0x1C8B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x768 SWAP2 PUSH2 0x1C8B JUMP JUMPDEST GT ISZERO PUSH2 0x786 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3E05 JUMP JUMPDEST POP PUSH2 0x7A1 JUMP JUMPDEST PUSH2 0x79E CALLDATASIZE DUP12 SWAP1 SUB DUP12 ADD PUSH1 0xC0 DUP13 ADD PUSH2 0x2A58 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x7BA PUSH2 0x7B4 PUSH1 0xC0 DUP13 ADD PUSH1 0xA0 DUP14 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP3 PUSH2 0x1CB7 JUMP JUMPDEST PUSH32 0x93F6B8187E81BD7D01CE234C043CD6AE4FEDA2E2AE91DAAE0962C68A656DA8C7 CALLER DUP12 DUP5 DUP13 DUP13 DUP13 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x7F7 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3396 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x85B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x87D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x8F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x90C PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x932 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x93D DUP8 PUSH2 0x1D08 JUMP JUMPDEST SWAP1 POP PUSH2 0x94C DUP2 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1D1B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x39E8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x9B3 SWAP2 PUSH2 0x9A9 SWAP2 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP10 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x1E25 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 PUSH2 0x9DD JUMPI POP PUSH1 0x0 PUSH2 0x9D1 PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x9F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3616 JUMP JUMPDEST PUSH2 0xA22 PUSH2 0xA0C PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0xA1C PUSH1 0x60 DUP12 ADD PUSH1 0x40 DUP13 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP4 PUSH2 0x1E39 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA34 PUSH1 0xC0 DUP11 ADD PUSH1 0xA0 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xAB2 JUMPI PUSH2 0xA52 PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF50CD32C DUP10 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7F SWAP3 SWAP2 SWAP1 PUSH2 0x3F1F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAAD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xB0A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xB33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3CE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xB53 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO ISZERO JUMPDEST PUSH2 0xB6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3970 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x36E5 JUMP JUMPDEST PUSH2 0xBA9 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xBDF PUSH2 0x26BE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xC28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xC4A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0xCF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0xD07 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xD3F JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD34 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0xD6D JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD62 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xD89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3878 JUMP JUMPDEST DUP4 PUSH2 0xDA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3841 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH2 0xDC6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3D15 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0xDD2 DUP8 PUSH2 0x1E71 JUMP JUMPDEST EQ PUSH2 0xDEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3564 JUMP JUMPDEST PUSH2 0xDF7 PUSH2 0x1E84 JUMP JUMPDEST PUSH2 0xE13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3679 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0xE2C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE41 SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP4 LT ISZERO PUSH2 0xEC6 JUMPI DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xE59 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 POP DUP9 DUP1 PUSH1 0x60 ADD SWAP1 PUSH2 0xE72 SWAP2 SWAP1 PUSH2 0x3F4A JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xE7C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE91 SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xEC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x35A8 JUMP JUMPDEST PUSH2 0xF32 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH2 0xED7 PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3F4A JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0xF32 JUMPI PUSH2 0xEED PUSH1 0x60 DUP11 ADD DUP11 PUSH2 0x3F4A JUMP JUMPDEST DUP3 DUP2 DUP2 LT PUSH2 0xEF7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xF0C SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF32 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xECA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF41 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x3F4A JUMP JUMPDEST SWAP1 POP DUP3 EQ PUSH2 0xF6C JUMPI PUSH2 0xF56 PUSH1 0xE0 DUP12 ADD DUP12 PUSH2 0x3F4A JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0xF60 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0xF6F JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT PUSH2 0xFA9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x38F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xFCE DUP4 PUSH2 0x1EA1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFDB DUP5 PUSH2 0x1EBC JUMP JUMPDEST SWAP1 POP PUSH2 0xFE5 PUSH2 0x2699 JUMP JUMPDEST PUSH2 0xFF2 PUSH1 0x60 DUP14 ADD DUP14 PUSH2 0x3F4A JUMP JUMPDEST SWAP1 POP DUP5 EQ ISZERO PUSH2 0x107C JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP16 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x103E SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 PUSH1 0x40 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1068 SWAP2 SWAP1 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE SWAP1 MSTORE SWAP1 POP PUSH2 0x1128 JUMP JUMPDEST PUSH2 0x1089 PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x3F90 JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0x1093 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x80 MUL ADD DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x10A9 SWAP2 SWAP1 PUSH2 0x2A58 JUMP JUMPDEST SWAP1 POP PUSH2 0x10EA PUSH2 0x10BB PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x3F4A JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x10C5 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP5 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x10DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x1EF1 JUMP JUMPDEST DUP2 MLOAD MSTORE PUSH2 0x1121 PUSH2 0x10FD PUSH1 0xC0 DUP15 ADD DUP15 PUSH2 0x3F4A JUMP JUMPDEST DUP7 DUP2 DUP2 LT PUSH2 0x1107 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 SUB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x10DF JUMPI INVALID JUMPDEST DUP2 MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST PUSH2 0x1132 DUP6 DUP3 PUSH2 0x1CB7 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0xE16 SWAP2 POP POP JUMP JUMPDEST POP PUSH32 0x49CBB28C69FFBDB6B3893F83D64557662A5DD43FFD6045B6A5180AB0A027F224 CALLER DUP8 PUSH1 0x7 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x117C SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3317 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x11DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x11FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EQ DUP1 PUSH2 0x1229 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x1245 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3CAE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x1278 SWAP1 DUP6 SWAP1 PUSH2 0x1E25 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x129A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3C05 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x12CA SWAP1 DUP3 PUSH2 0x1F0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SSTORE PUSH2 0x12FB DUP5 DUP4 DUP4 PUSH2 0x1E39 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x134F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1371 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP3 ADDRESS PUSH2 0x1385 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x13AB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B6 DUP6 PUSH2 0x1C33 JUMP JUMPDEST SWAP1 POP PUSH2 0x13C9 DUP5 DUP5 PUSH1 0x7 PUSH1 0x2 ADD SLOAD DUP5 PUSH2 0x1F4C JUMP JUMPDEST PUSH2 0x13D1 PUSH2 0x1E84 JUMP JUMPDEST PUSH2 0x13ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3679 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0x1423 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3C65 JUMP JUMPDEST DUP2 DUP2 SSTORE PUSH2 0x1435 TIMESTAMP PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0x87B348A76DD4EF431D45553A1D8C5934DB960E64201A5776AB64E3EB397F4CFA SWAP1 PUSH2 0x117C SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP6 SWAP1 PUSH2 0x336A JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x14B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x14D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x14E7 DUP3 PUSH2 0x1FAE JUMP JUMPDEST ISZERO PUSH2 0x1510 JUMPI DUP1 CALLVALUE EQ PUSH2 0x150B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3A1F JUMP JUMPDEST PUSH2 0x1556 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x152E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3A98 JUMP JUMPDEST PUSH2 0x153A DUP3 CALLER ADDRESS DUP5 PUSH2 0x1FBB JUMP JUMPDEST PUSH2 0x1556 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x39A7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE MLOAD PUSH32 0xB52926AC8ED62D53D4B88D81B71C48639BD63AA53950FCF3E1D7676CA7C26140 SWAP1 PUSH2 0x15A6 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x3485 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1624 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH2 0x162D DUP3 PUSH2 0x1EA1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x163D DUP3 DUP3 PUSH2 0x1CB7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x168C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x16AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 PUSH2 0x16BB DUP5 PUSH2 0x1D08 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1720 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1742 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH2 0x162D DUP3 PUSH2 0x1EBC JUMP JUMPDEST PUSH2 0x1756 DUP4 DUP4 DUP4 PUSH2 0x200E JUMP JUMPDEST POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x17A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x17C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP5 ADDRESS PUSH2 0x17DA PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x1812 JUMPI POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1807 PUSH1 0x40 DUP4 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 ISZERO PUSH2 0x1840 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1835 PUSH1 0x60 DUP4 ADD PUSH1 0x40 DUP5 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x185C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1867 DUP8 PUSH2 0x1E71 JUMP JUMPDEST SWAP1 POP PUSH2 0x1877 DUP8 DUP3 DUP9 DUP9 DUP9 DUP9 PUSH2 0x206F JUMP JUMPDEST PUSH2 0x187F PUSH2 0x1E84 JUMP JUMPDEST ISZERO PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3679 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x120 DUP9 ADD CALLDATALOAD GT PUSH2 0x18C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x371C JUMP JUMPDEST PUSH2 0x18CA PUSH2 0x2179 JUMP JUMPDEST PUSH2 0x18FE JUMPI PUSH2 0x18DD TIMESTAMP PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0xA SSTORE PUSH2 0x18FA PUSH2 0x18F3 PUSH2 0x100 DUP10 ADD CALLDATALOAD PUSH1 0x2 PUSH2 0x2181 JUMP JUMPDEST TIMESTAMP SWAP1 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x7 DUP2 DUP2 SSTORE PUSH2 0x120 DUP9 ADD CALLDATALOAD PUSH1 0x8 SSTORE PUSH2 0x140 DUP9 ADD CALLDATALOAD PUSH1 0x9 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEF03CF86F2E77E1A0AE5CB25B50519E55B94788B920ACE71F92341DF2DAB97ED SWAP2 PUSH2 0x1947 SWAP2 CALLER SWAP2 DUP12 SWAP2 PUSH2 0x32E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x19A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x19CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1A53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1ABA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1ADC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1B53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1B75 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1B8D PUSH2 0x26DE JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ ISZERO PUSH2 0x1BD6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3DCE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD EQ PUSH2 0x1BF8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B8A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x7 SLOAD DUP2 MSTORE PUSH1 0x8 SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x9 SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xB SLOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x3EDA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C79 DUP6 DUP6 PUSH2 0x21BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1CB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x37C1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1756 JUMPI DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 PUSH1 0x2 DUP2 LT PUSH2 0x1CD3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 POP DUP1 ISZERO PUSH2 0x1CFF JUMPI PUSH2 0x1CFF DUP5 DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x2 DUP2 LT PUSH2 0x1CF4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x200E JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1CBA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x3F0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1D31 SWAP3 SWAP2 SWAP1 PUSH2 0x3502 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1D97 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x1 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x1DB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3C2E JUMP JUMPDEST PUSH2 0x1E01 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x2 SLOAD DUP6 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x1E1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3939 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CB0 DUP3 PUSH2 0x1E34 DUP6 PUSH2 0x21D3 JUMP JUMPDEST PUSH2 0x226A JUMP JUMPDEST PUSH2 0x1E43 DUP4 DUP3 PUSH2 0x2280 JUMP JUMPDEST PUSH2 0x1E4E DUP4 DUP4 DUP4 PUSH2 0x22A2 JUMP JUMPDEST PUSH2 0x1756 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3753 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x3EC7 JUMP JUMPDEST PUSH1 0x0 TIMESTAMP PUSH1 0x7 PUSH1 0x3 ADD SLOAD GT ISZERO DUP1 ISZERO PUSH2 0x1E9C JUMPI POP PUSH1 0xB SLOAD TIMESTAMP LT JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x3 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH2 0x1EE9 DUP5 PUSH2 0x21D3 JUMP JUMPDEST ADD SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1CB0 JUMPI PUSH1 0x0 NOT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CB0 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x22CB JUMP JUMPDEST PUSH2 0x1F8C DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x22F7 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FA8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3BC1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2005 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1FD6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2394 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x203E SWAP1 DUP3 PUSH2 0x1EF1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP7 AND DUP3 MSTORE SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2084 SWAP3 SWAP2 SWAP1 PUSH2 0x3502 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x20EE DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x20E6 SWAP3 POP POP POP PUSH1 0x40 DUP11 ADD PUSH1 0x20 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST DUP4 SWAP2 SWAP1 PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x210A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3D58 JUMP JUMPDEST PUSH2 0x2154 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x20E6 SWAP3 POP POP POP PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x28E2 JUMP JUMPDEST PUSH2 0x2170 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x378A JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD TIMESTAMP LT SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2190 JUMPI POP PUSH1 0x0 PUSH2 0x162D JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x219D JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1CB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x21C7 DUP5 PUSH2 0x2445 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F02 DUP2 DUP5 PUSH2 0x2458 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21DE DUP3 PUSH2 0x1FAE JUMP JUMPDEST PUSH2 0x2263 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x220E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x32D0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x223A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225E SWAP2 SWAP1 PUSH2 0x2DBD JUMP JUMPDEST PUSH2 0x162D JUMP JUMPDEST POP SELFBALANCE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2279 JUMPI DUP2 PUSH2 0x1CB0 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22AD DUP5 PUSH2 0x1FAE JUMP JUMPDEST PUSH2 0x22C1 JUMPI PUSH2 0x22BC DUP5 DUP5 DUP5 PUSH2 0x2586 JUMP JUMPDEST PUSH2 0x1F02 JUMP JUMPDEST PUSH2 0x1F02 DUP4 DUP4 PUSH2 0x2593 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x22EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x2389 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2313 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x2354 JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2337 SWAP3 SWAP2 SWAP1 PUSH2 0x3262 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x2380 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2367 SWAP3 SWAP2 SWAP1 PUSH2 0x3262 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x22FC JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x239F DUP4 PUSH2 0x260B JUMP JUMPDEST PUSH2 0x23BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3B5F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x23D7 SWAP2 SWAP1 PUSH2 0x3280 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2414 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2419 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2428 DUP3 DUP3 PUSH2 0x2644 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x2005 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2005 SWAP2 SWAP1 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1C46 SWAP2 SWAP1 PUSH2 0x329C JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x247B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3642 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x24CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x38AF JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x24E5 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x2502 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x3A56 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2527 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34A9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2549 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x257C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17C SWAP1 PUSH2 0x352D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F02 DUP5 DUP5 DUP5 PUSH2 0x2651 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x25AF SWAP1 PUSH2 0x32CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x25EC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x25F1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2600 DUP3 DUP3 PUSH2 0x2644 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x1F02 JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x163D JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1F02 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x266A SWAP3 SWAP2 SWAP1 PUSH2 0x3485 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x2394 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x26AC PUSH2 0x270C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26B9 PUSH2 0x270C JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x162D DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2746 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x275C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x278D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2797 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP5 PUSH1 0x40 DUP6 ADD GT ISZERO PUSH2 0x27AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x27D7 JUMPI DUP2 CALLDATALOAD PUSH2 0x27C2 DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x27AE JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x27F1 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2807 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2830 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x283A PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x284B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2855 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 DUP6 ADD DUP7 DUP2 GT ISZERO PUSH2 0x2868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x288A JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x286B JUMP JUMPDEST POP DUP3 DUP6 MSTORE PUSH2 0x2898 DUP8 DUP3 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28B9 JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28B9 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28B9 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28F3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1CB0 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2910 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x291B DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x292B DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x294A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2955 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2965 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x298A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2995 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x29A5 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x29B5 DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xA0 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29D2 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x29DD DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP2 POP PUSH2 0x29EC DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x281F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A07 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2A12 DUP2 PUSH2 0x40CF JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A31 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CB0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A51 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A69 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1CB0 DUP4 DUP4 PUSH2 0x281F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A84 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2A8E PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2A9C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2AA6 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x2AB8 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2AD9 JUMPI DUP3 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2ABA JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x2AEB JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x2AF5 PUSH1 0x40 PUSH2 0x3FD6 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x2B0B JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2B36 JUMPI DUP2 MLOAD PUSH2 0x2B21 DUP2 PUSH2 0x40CF JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2B0D JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2B5C JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2B72 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B7E DUP10 DUP4 DUP11 ADD PUSH2 0x28A7 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B93 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2B9F DUP10 DUP4 DUP11 ADD PUSH2 0x2735 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2BB7 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2BC4 DUP9 DUP3 DUP10 ADD PUSH2 0x2735 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2BEC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2C02 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C0E DUP10 DUP4 DUP11 ADD PUSH2 0x28A7 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C23 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C2F DUP10 DUP4 DUP11 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C47 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2BC4 DUP9 DUP3 DUP10 ADD PUSH2 0x27E0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A0 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2C69 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2C73 DUP6 DUP6 PUSH2 0x28BF JUMP JUMPDEST SWAP3 POP PUSH2 0x180 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C8E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2C9A DUP7 DUP3 DUP8 ADD PUSH2 0x2735 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1E0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2CC2 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2CCC DUP10 DUP10 PUSH2 0x28BF JUMP JUMPDEST SWAP7 POP PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2CE8 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x2CF4 DUP12 DUP4 DUP13 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x1A0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2D0D JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2D19 DUP12 DUP4 DUP13 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1C0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2D32 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x2D3F DUP11 DUP3 DUP12 ADD PUSH2 0x27E0 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D78 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1F02 DUP5 DUP3 DUP6 ADD PUSH2 0x28D1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2D9B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2DB1 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C0E DUP10 DUP4 DUP11 ADD PUSH2 0x28D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DCE JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2E1F JUMPI DUP2 CALLDATALOAD PUSH2 0x2E04 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2DF1 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 DUP3 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2E1F JUMPI PUSH1 0x40 DUP1 DUP4 DUP10 CALLDATACOPY DUP8 DUP2 ADD DUP6 DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP6 SWAP1 JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x2E85 JUMPI DUP3 CALLDATALOAD PUSH2 0x2E68 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP6 ADD PUSH2 0x2E54 JUMP JUMPDEST POP POP POP PUSH1 0x80 SWAP7 DUP8 ADD SWAP7 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2E39 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x2EB3 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x20 DUP4 MUL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE DUP3 DUP3 PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP1 PUSH1 0x20 DUP5 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP6 ADD ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2F11 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x40A3 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 PUSH1 0x40 DUP4 DUP2 ADD DUP3 DUP2 MSTORE SWAP1 DUP4 ADD SWAP2 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2F6A JUMPI PUSH1 0x20 DUP4 CALLDATALOAD PUSH2 0x2F4F DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2F39 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 PUSH1 0x20 DUP4 ADD PUSH2 0x2FBB DUP6 PUSH2 0x2FB6 DUP4 DUP8 PUSH2 0x272A JUMP JUMPDEST PUSH2 0x2DD5 JUMP JUMPDEST PUSH2 0x2FC5 DUP2 DUP6 PUSH2 0x3FFC JUMP JUMPDEST SWAP1 POP PUSH2 0x2FD4 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x2FE2 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x2FEF PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x2FFD PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x3010 DUP4 DUP8 ADD DUP3 DUP5 PUSH2 0x2DE2 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x3021 PUSH1 0x80 DUP5 ADD DUP5 PUSH2 0x4050 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x3034 DUP4 DUP3 DUP5 PUSH2 0x2E2A JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x3045 PUSH1 0xA0 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x3058 DUP4 DUP3 DUP5 PUSH2 0x2E9B JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x3069 PUSH1 0xC0 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x307C DUP4 DUP3 DUP5 PUSH2 0x2E9B JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x308D PUSH1 0xE0 DUP5 ADD DUP5 PUSH2 0x4009 JUMP JUMPDEST DUP6 DUP4 SUB PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x30A0 DUP4 DUP3 DUP5 PUSH2 0x2E9B JUMP JUMPDEST PUSH2 0x100 DUP7 DUP2 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x120 DUP1 DUP8 ADD CALLDATALOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP6 DUP7 ADD CALLDATALOAD SWAP6 SWAP1 SWAP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x30D9 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 MSTORE PUSH1 0x20 DUP3 DUP2 ADD CALLDATALOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 PUSH2 0x30FF DUP3 PUSH2 0x40CF JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3112 PUSH1 0x60 DUP3 ADD DUP3 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x311F PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x312D PUSH1 0x80 DUP3 ADD DUP3 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x313A PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x3148 PUSH1 0xA0 DUP3 ADD DUP3 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x3155 PUSH1 0xA0 DUP5 ADD DUP3 PUSH2 0x2DD5 JUMP JUMPDEST POP PUSH2 0x3166 PUSH1 0xC0 DUP4 ADD PUSH1 0xC0 DUP4 ADD PUSH2 0x2F25 JUMP JUMPDEST PUSH2 0x140 DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SLOAD DUP3 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH2 0x31A9 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP5 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x31C5 DUP3 PUSH2 0x40CF JUMP JUMPDEST SWAP1 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x31DC DUP3 PUSH2 0x40CF JUMP JUMPDEST DUP1 DUP3 AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP5 ADD CALLDATALOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x3208 DUP3 PUSH2 0x40CF JUMP JUMPDEST AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD CALLDATASIZE DUP4 SWAP1 SUB PUSH1 0x1E NOT ADD DUP2 SLT PUSH2 0x3225 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x323C JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x324A JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xE0 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x2005 PUSH1 0xE0 DUP7 ADD DUP3 PUSH1 0x20 DUP6 ADD PUSH2 0x2ECF JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3292 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x40A3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x3308 SWAP1 DUP4 ADD DUP6 PUSH2 0x2F9F JUMP JUMPDEST SWAP1 POP PUSH2 0x1F02 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2F71 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x333C DUP4 DUP3 ADD DUP9 PUSH2 0x2F9F JUMP JUMPDEST SWAP1 POP PUSH2 0x334B PUSH1 0x40 DUP5 ADD DUP8 PUSH2 0x2F71 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x335E DUP2 DUP6 DUP8 PUSH2 0x2DE2 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH2 0x200 DUP2 ADD PUSH2 0x3388 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30CE JUMP JUMPDEST PUSH2 0x1F02 PUSH2 0x1A0 DUP4 ADD DUP5 PUSH2 0x317D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x0 PUSH2 0x2C0 PUSH1 0x20 PUSH2 0x33B5 DUP2 DUP6 ADD DUP13 PUSH2 0x30CE JUMP JUMPDEST PUSH2 0x33C3 PUSH2 0x1A0 DUP6 ADD DUP12 PUSH2 0x317D JUMP JUMPDEST DUP2 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x33D7 DUP3 DUP6 ADD DUP10 DUP12 PUSH2 0x2ECF JUMP JUMPDEST SWAP2 POP DUP4 DUP3 SUB PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x33ED DUP3 DUP8 DUP10 PUSH2 0x2ECF JUMP JUMPDEST DUP6 MLOAD SWAP1 SWAP4 POP SWAP2 POP PUSH1 0x0 PUSH2 0x240 DUP6 ADD JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x341B JUMPI DUP4 MLOAD DUP2 MSTORE SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 DUP3 ADD PUSH2 0x33FC JUMP JUMPDEST POP POP DUP1 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x280 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x3450 JUMPI PUSH2 0x343E DUP5 MLOAD PUSH2 0x4097 JUMP JUMPDEST DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x342B JUMP JUMPDEST POP POP POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 MSTORE PUSH2 0x34DA PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x2EF9 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x34ED DUP2 DUP8 DUP10 PUSH2 0x2ECF JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x335E DUP2 DUP6 DUP8 PUSH2 0x2ECF JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH1 0x2 DUP5 LT PUSH2 0x3510 JUMPI INVALID JUMPDEST SWAP3 DUP2 MSTORE PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1CB0 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2EF9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C5F PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x9082A69 PUSH1 0xE3 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E4445585F4D49534D415443480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A204348414E4E454C5F4D49534D41544348000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x434D4357697468647261773A204E4F5F4F5 PUSH1 0x74 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5048415345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A204944454E544943414C5F5041525449434950414E545300 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4E4F4E4345000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A205452414E534645525F4641494C454400000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F424F425F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D111519553911151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204E4F5F4153534554535F474956454E00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4348414E4E454C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A204348414E4E454C5F414C52454144595F PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x1111519553911151 PUSH1 0xC2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F424F425F53494700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x434D43436F72653A20494E56414C49445F5041525449434950414E5400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2045524332305F5452414E534645525F4641494C45 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20414C52454144595F4558454355544544000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A2056414C55455F4D49534D41544348000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D434465706F7369743A204554485F574954485F4552435F5452414E534645 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F4E4F545F444953 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1415551151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206D756C7469706C69636174696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A205245454E5452414E545F43414C4C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F4D45524B4C455F50 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x2927A7A3 PUSH1 0xE1 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH15 0x434D4341737365743A204E4F5F4F5 PUSH1 0x8C SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4357697468647261773A20494E56414C49445F414C4943455F5349470000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A205452414E534645525F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x17D11254D415551151 PUSH1 0xBA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341737365743A204F574E45525F4D49534D415443480000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x434D43436F72653A20414C52454144595F534554555 PUSH1 0x54 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A2057524F4E475F41525241595F4C454E47 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x544853 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F414C4943455F5349 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x47 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5245534F4C564552 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6173746572636F70793A204F4E4C595F5649415F50524F5859000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F42414C414E434553 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x434D4341646A7564696361746F723A20494E56414C49445F5452414E53464552 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0xBE9082A69 PUSH1 0xDB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x162D DUP3 DUP5 PUSH2 0x2F25 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1CB0 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2F9F JUMP JUMPDEST PUSH2 0x180 DUP2 ADD PUSH2 0x162D DUP3 DUP5 PUSH2 0x30CE JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1CB0 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x319C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x3F32 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x319C JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3F60 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3F79 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP1 DUP2 ADD SWAP3 POP DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3FA6 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3FBF JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3FF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x1CB0 DUP2 PUSH2 0x40CF JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x401F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x403E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4066 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4085 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x2776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40BE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x40A6 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1FA8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x40E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x279B4C261127B0AD7885A389DE95 REVERT PUSH2 0xD8C5 EXTCODEHASH STATICCALL SGT SWAP7 STATICCALL 0xC6 STOP BYTE DIFFICULTY TIMESTAMP INVALID ORIGIN SHL PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "886:431:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;;;;;;;;;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;307:1;542:4;576:11:::0;886:431:41;;;;;9214:2884:10;;;;;;;;;;-1:-1:-1;9214:2884:10;;;;;:::i;:::-;;:::i;:::-;;2153:168:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1767:1166:14;;;;;;;;;;-1:-1:-1;1767:1166:14;;;;;:::i;:::-;;:::i;1322:447:12:-;;;;;;;;;;-1:-1:-1;1322:447:12;;;;;:::i;:::-;;:::i;2174:238:10:-;;;;;;;;;;-1:-1:-1;2174:238:10;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3827:3983::-;;;;;;;;;;-1:-1:-1;3827:3983:10;;;;;:::i;:::-;;:::i;3046:910:11:-;;;;;;;;;;-1:-1:-1;3046:910:11;;;;;:::i;:::-;;:::i;7816:1392:10:-;;;;;;;;;;-1:-1:-1;7816:1392:10;;;;;:::i;:::-;;:::i;1752:848:13:-;;;;;;:::i;:::-;;:::i;789:226::-;;;;;;;;;;-1:-1:-1;789:226:13;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1149:166:41:-;;;;;;;;;;-1:-1:-1;1149:166:41;;;;;:::i;:::-;;:::i;1089:242:14:-;;;;;;;;;;-1:-1:-1;1089:242:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1182:222:13:-;;;;;;;;;;-1:-1:-1;1182:222:13;;;;;:::i;:::-;;:::i;948:195:41:-;;;;;;;;;;-1:-1:-1;948:195:41;;;;;:::i;:::-;;:::i;2418:1403:10:-;;;;;;;;;;-1:-1:-1;2418:1403:10;;;;;:::i;:::-;;:::i;1238:218:11:-;;;;;;;;;;-1:-1:-1;1238:218:11;;;;;:::i;:::-;;:::i;1959:209:10:-;;;;;;;;;;-1:-1:-1;1959:209:10;;;;;:::i;:::-;;:::i;2026:236:11:-;;;;;;;;;;-1:-1:-1;2026:236:11;;;;;:::i;:::-;;:::i;1874:172:12:-;;;;;;;;;;;;;:::i;1749:204:10:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;356:19:17:-;;;;;;;;;;;;;:::i;9214:2884:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;9488:3:10;1662:4:::2;1632:18;;::::0;::::2;9488:3:::0;1632:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1632:35:10::2;;1611:114;;;;-1:-1:-1::0;;;1611:114:10::2;;;;;;;:::i;:::-;9622:14:::3;::::0;;::::3;;9551:39;9605:32:::0;;;:16:::3;:32:::0;;;;;;9745:37:::3;::::0;::::3;::::0;9724:126:::3;;;;-1:-1:-1::0;;;9724:126:10::3;;;;;;;:::i;:::-;9979:33:::0;;9953:22:::3;9971:3:::0;9953:17:::3;:22::i;:::-;:59;9932:143;;;;-1:-1:-1::0;;;9932:143:10::3;;;;;;;:::i;:::-;10141:26;::::0;::::3;::::0;::::3;;10140:27;10119:115;;;;-1:-1:-1::0;;;10119:115:10::3;;;;;;;:::i;:::-;10244:26;::::0;::::3;:33:::0;;-1:-1:-1;;10244:33:10::3;10273:4;10244:33;::::0;;10288:22:::3;;:::i;:::-;10343:15;:37;;;10325:15;:55;10321:1400;;;10514:3;:20;;;10482:27;;10472:38;;;;;;;:::i;:::-;;;;;;;;:62;10447:158;;;;-1:-1:-1::0;;;10447:158:10::3;;;;;;;:::i;:::-;10794:13;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;10780:27:10::3;:10;-1:-1:-1::0;;;;;10780:27:10::3;;:101;;;;10811:70;10847:18;;10811:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;10867:13:10::3;::::0;-1:-1:-1;;;10867:13:10;;;::::3;::::0;::::3;;:::i;:::-;10811:20;::::0;::::3;;::::0;:70;:35:::3;:70::i;:::-;10755:192;;;;-1:-1:-1::0;;;10755:192:10::3;;;;;;;:::i;:::-;10974:38;11051:22;::::0;;;::::3;::::0;::::3;;:::i;:::-;10974:100;;11098:18;-1:-1:-1::0;;;;;11098:26:10::3;;11153:3;:11;;11142:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;11183:27;;11228:23;;11098:167;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11088:177:::0;-1:-1:-1;11443:48:10::3;11469:11;::::0;::::3;11443:21;11469::::0;;;::::3;11443:25;:48::i;:::-;11401:14:::0;;:17:::3;::::0;::::3;::::0;11379;;:40:::3;::::0;:21:::3;:40::i;:::-;:112;;11354:203;;;;-1:-1:-1::0;;;11354:203:10::3;;;;;;;:::i;:::-;10321:1400;;;;11689:21;;::::0;;;;;11699:11:::3;::::0;::::3;11689:21;:::i;:::-;;;10321:1400;11817:41;11837:11;::::0;;;::::3;::::0;::::3;;:::i;:::-;11850:7;11817:19;:41::i;:::-;11896:195;11926:10;11950:3;11967:15;11996:27;;12037:23;;12074:7;11896:195;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;;;;9214:2884:10:o;2153:168:12:-;2281:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2311:3:12::2;::::0;-1:-1:-1;;;;;2311:3:12::2;2153:168:::0;:::o;1767:1166:14:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1966:2:14;1005:4:::2;976:17;;::::0;::::2;1966:2:::0;976:17:::2;:::i;:::-;-1:-1:-1::0;;;;;976:34:14::2;;955:110;;;;-1:-1:-1::0;;;955:110:14::2;;;;;;;:::i;:::-;2005:14:::3;2022:20;2039:2;2022:16;:20::i;:::-;2005:37;;2120:72;2155:6;2163:14;;2179:12;;2120:34;:72::i;:::-;2241:18;::::0;;;:10:::3;:18;::::0;;;;;::::3;;2240:19;2232:61;;;;-1:-1:-1::0;;;2232:61:14::3;;;;;;;:::i;:::-;2303:18;::::0;;;:10:::3;:18;::::0;;;;;;;:25;;-1:-1:-1;;2303:25:14::3;2324:4;2303:25;::::0;;2412:41:::3;::::0;2431:10:::3;::::0;;;;;::::3;;:::i;:::-;2443:2;:9;;;2412:18;:41::i;:::-;2389:64;;2557:1;2542:12;:16;:43;;;-1:-1:-1::0;2583:1:14::3;2562:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2562:23:14::3;;;2542:43;2521:108;;;;-1:-1:-1::0;;;2521:108:14::3;;;;;;;:::i;:::-;2685:53;2699:10;::::0;;;::::3;::::0;::::3;;:::i;:::-;2711:12;::::0;;;::::3;::::0;::::3;;:::i;:::-;2725;2685:13;:53::i;:::-;2847:1;2826:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2826:23:14::3;;2822:105;;2880:9;::::0;;;::::3;::::0;::::3;;:::i;:::-;-1:-1:-1::0;;;;;2865:33:14::3;;2899:2;2903:12;2865:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;2822:105;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;;1767:1166:14:o;1322:447:12:-;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;1444:5:::1;::::0;-1:-1:-1;;;;;1444:5:12::1;:19:::0;1436:54:::1;;;;-1:-1:-1::0;;;1436:54:12::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1521:20:12;::::1;::::0;;::::1;::::0;:42:::1;;-1:-1:-1::0;;;;;;1545:18:12;::::1;::::0;::::1;1521:42;1500:117;;;;-1:-1:-1::0;;;1500:117:12::1;;;;;;;:::i;:::-;1645:4;-1:-1:-1::0;;;;;1635:14:12::1;:6;-1:-1:-1::0;;;;;1635:14:12::1;;;1627:58;;;;-1:-1:-1::0;;;1627:58:12::1;;;;;;;:::i;:::-;1695:23;:21;:23::i;:::-;1728:5;:14:::0;;-1:-1:-1;;;;;1728:14:12;;::::1;-1:-1:-1::0;;;;;;1728:14:12;;::::1;;::::0;;;1752:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;1322:447::o;2174:238:10:-;2332:22;;:::i;:::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2377:28:10::2;::::0;;;:16:::2;:28;::::0;;;;;;;;2370:35;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;;::::0;::::2;;;;::::0;;;;;;;;2174:238::o;3827:3983::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;4028:3:10;1385:4:::2;1355:18;;::::0;::::2;4028:3:::0;1355:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1355:35:10::2;;:73;;;;-1:-1:-1::0;1423:5:10::2;::::0;-1:-1:-1;;;;;1423:5:10::2;1410:9;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1410:18:10::2;;1355:73;:107;;;;-1:-1:-1::0;1459:3:10::2;::::0;-1:-1:-1;;;;;1459:3:10::2;1448:7;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1448:14:10::2;;1355:107;1334:185;;;;-1:-1:-1::0;;;1334:185:10::2;;;;;;;:::i;:::-;4135:19:::0;4127:63:::3;;;;-1:-1:-1::0;;;4127:63:10::3;;;;;;;:::i;:::-;4221:33:::0;;::::3;;4200:115;;;;-1:-1:-1::0;;;4200:115:10::3;;;;;;;:::i;:::-;4442:14;:31:::0;4417:21:::3;4434:3:::0;4417:16:::3;:21::i;:::-;:56;4396:139;;;;-1:-1:-1::0;;;4396:139:10::3;;;;;;;:::i;:::-;4604:15;:13;:15::i;:::-;4596:57;;;;-1:-1:-1::0;;;4596:57:10::3;;;;;;;:::i;:::-;5018:9;5013:2659;5033:19:::0;;::::3;5013:2659;;;5073:15;5091:8;;5100:1;5091:11;;;;;;;;;;;;;;;;;;;;:::i;:::-;5073:29:::0;-1:-1:-1;5192:13:10::3;5223:18:::0;;::::3;5219:564;;;5332:7;;5340:1;5332:10;;;;;;;;;;;;;5324:18;;5400:3;:12;;;;;;;;:::i;:::-;5413:5;5400:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5389:30:10::3;:7;-1:-1:-1::0;;;;;5389:30:10::3;;5360:131;;;;-1:-1:-1::0;;;5360:131:10::3;;;;;;;:::i;:::-;5219:564;;;-1:-1:-1::0;5598:1:10::3;5585:184;5609:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;5601:5;:27;5585:184;;;5676:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;5689:5;5676:19;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5665:30:10::3;:7;-1:-1:-1::0;;;;;5665:30:10::3;;5661:90;;;5723:5;;5661:90;5630:7;;5585:184;;;6203:19;6255:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;6246:5;:28;6245:127;;6349:16;;::::0;::::3;:3:::0;:16:::3;:::i;:::-;6366:5;6349:23;;;;;;;;;;;;;6245:127;;;1096:1;6245:127;-1:-1:-1::0;;;;;6419:21:10;::::3;;::::0;;;:12:::3;:21;::::0;;;;;6203:169;;-1:-1:-1;6419:35:10;-1:-1:-1;6390:146:10::3;;;;-1:-1:-1::0;;;6390:146:10::3;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6554:21:10;::::3;;::::0;;;:12:::3;:21;::::0;;;;:35;;;;6670:31:::3;6567:7:::0;6670:22:::3;:31::i;:::-;6652:49;;6715:13;6731:29;6752:7;6731:20;:29::i;:::-;6715:45;;6775:22;;:::i;:::-;6825:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;:19;;6816:5;:28;6812:752;;;6964:137;;;;;;;;;;;;;;;;7003:7;6964:137;;;;7012:5;6964:137;;::::0;::::3;;;;;;;;;;;;7053:3;:9;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6964:137:10::3;-1:-1:-1::0;;;;;6964:137:10::3;;;;;7073:3;:7;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6964:137:10::3;::::0;;;;6954:147;-1:-1:-1;6812:752:10::3;;;7206:12;;::::0;::::3;:3:::0;:12:::3;:::i;:::-;7219:5;7206:19;;;;;;;;;;;;7196:29;;;;;;;;;;:::i;:::-;::::0;-1:-1:-1;7307:103:10::3;7363:22;;::::0;::::3;:3:::0;:22:::3;:::i;:::-;7386:5;7363:29;;;;;;;;;;;;;7353:7;:39;7307:7;:14;;;7322:1;7307:17;;;;;;;;;;::::0;;:24:::3;:103::i;:::-;7287:14:::0;;:123;7448:101:::3;7502:22;;::::0;::::3;::::0;::::3;:::i;:::-;7525:5;7502:29;;;;;;;;;;;;;7494:5;:37;7448:7;:14;;;7463:1;7448:17;;;;;;:101;7428:14:::0;;:17:::3;;:121:::0;6812:752:::3;7624:37;7644:7;7653;7624:19;:37::i;:::-;-1:-1:-1::0;;5054:3:10::3;::::0;;::::3;::::0;-1:-1:-1;5013:2659:10::3;::::0;-1:-1:-1;;5013:2659:10::3;;;7687:116;7716:10;7740:3;7757:14;7785:8;;7687:116;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;3827:3983:10:o;3046:910:11:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;3373:10:11::2;-1:-1:-1::0;;;;;3373:19:11;::::2;;::::0;:41:::2;;;3405:9;-1:-1:-1::0;;;;;3396:18:11::2;:5;-1:-1:-1::0;;;;;3396:18:11::2;;3373:41;3352:112;;;;-1:-1:-1::0;;;3352:112:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3565:23:11;;::::2;3475:14;3565:23:::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;;;3504:105:::2;::::0;3540:7;;3504:18:::2;:105::i;:::-;3475:134;;3670:1;3661:6;:10;3653:38;;;;-1:-1:-1::0;;;3653:38:11::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3827:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;::::2;::::0;;;;;;;:42:::2;::::0;3862:6;3827:34:::2;:42::i;:::-;-1:-1:-1::0;;;;;3772:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:52;;::::2;::::0;;;;;;:97;3908:41:::2;3787:7:::0;3931:9;3942:6;3908:13:::2;:41::i;:::-;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;3046:910:11:o;7816:1392:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;7992:3:10;1662:4:::2;1632:18;;::::0;::::2;7992:3:::0;1632:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1632:35:10::2;;1611:114;;;;-1:-1:-1::0;;;1611:114:10::2;;;;;;;:::i;:::-;8100:25:::3;8128:22;8146:3;8128:17;:22::i;:::-;8100:50;;8160:126;8191:15;;8220:14;:25;;;8259:17;8160;:126::i;:::-;8400:15;:13;:15::i;:::-;8392:57;;;;-1:-1:-1::0;;;8392:57:10::3;;;;;;;:::i;:::-;8579:14;::::0;;::::3;;8508:39;8562:32:::0;;;:16:::3;:32:::0;;;;;;8692:37:::3;::::0;::::3;::::0;:42;8671:130:::3;;;;-1:-1:-1::0;;;8671:130:10::3;;;;;;;:::i;:::-;8859:53:::0;;;9027:62:::3;:15;9060:19;::::0;::::3;;9027;:62::i;:::-;8987:37;::::0;::::3;:102:::0;9105:96:::3;::::0;::::3;::::0;::::3;::::0;9135:10:::3;::::0;9159:3;;8987:15;;9105:96:::3;:::i;1752:848:13:-:0;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;1917:25:13::2;1934:7:::0;1917:16:::2;:25::i;:::-;1913:540;;;1979:6;1966:9;:19;1958:58;;;;-1:-1:-1::0;;;1958:58:13::2;;;;;;;:::i;:::-;1913:540;;;2121:9;:14:::0;2113:60:::2;;;;-1:-1:-1::0;;;2113:60:13::2;;;;;;;:::i;:::-;2212:163;2255:7;2284:10;2324:4;2351:6;2212:21;:163::i;:::-;2187:255;;;;-1:-1:-1::0;;;2187:255:13::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2515:22:13;::::2;;::::0;;;:13:::2;:22;::::0;;;;;;:32;;;::::2;::::0;;2562:31;::::2;::::0;::::2;::::0;2529:7;;2541:6;;2562:31:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;1752:848:13:o;789:226::-;947:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;977:31:13::2;1000:7;977:22;:31::i;:::-;970:38:::0;789:226;-1:-1:-1;;789:226:13:o;1149:166:41:-;1271:37;1291:7;1300;1271:19;:37::i;:::-;1149:166;;:::o;1089:242:14:-;1265:4;1024::12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1292:10:14::2;:32;1303:20;1320:2;1303:16;:20::i;:::-;1292:32:::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;1292:32:14;;::::2;;::::0;1089:242;-1:-1:-1;;1089:242:14:o;1182:222:13:-;1338:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;1368:29:13::2;1389:7;1368:20;:29::i;948:195:41:-:0;1093:43;1106:7;1115:9;1126;1093:12;:43::i;:::-;948:195;;;:::o;2418:1403:10:-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;484:4;;:12;476:56;;;;-1:-1:-1::0;;;476:56:17::1;;;;;;;:::i;:::-;348:1;542:4;:13:::0;2623:3:10;1385:4:::2;1355:18;;::::0;::::2;2623:3:::0;1355:18:::2;:::i;:::-;-1:-1:-1::0;;;;;1355:35:10::2;;:73;;;;-1:-1:-1::0;1423:5:10::2;::::0;-1:-1:-1;;;;;1423:5:10::2;1410:9;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1410:18:10::2;;1355:73;:107;;;;-1:-1:-1::0;1459:3:10::2;::::0;-1:-1:-1;;;;;1459:3:10::2;1448:7;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1448:14:10::2;;1355:107;1334:185;;;;-1:-1:-1::0;;;1334:185:10::2;;;;;;;:::i;:::-;2663:15:::3;2681:21;2698:3;2681:16;:21::i;:::-;2663:39;;2780:78;2815:3;2820:7;2829:14;;2845:12;;2780:34;:78::i;:::-;2937:15;:13;:15::i;:::-;2936:16;2928:58;;;;-1:-1:-1::0;;;2928:58:10::3;;;;;;;:::i;:::-;3084:20:::0;;3107:9:::3;::::0;::::3;;-1:-1:-1::0;3063:108:10::3;;;;-1:-1:-1::0;;;3063:108:10::3;;;;;;;:::i;:::-;3187:18;:16;:18::i;:::-;3182:372;;3398:32;:15;3418:11;::::0;::::3;;3398:19;:32::i;:::-;3365:30:::0;:65;3474:69:::3;3511:18;:11;::::0;::::3;;3527:1;3511:15;:18::i;:::-;3474:15;::::0;:19:::3;:69::i;:::-;3444:27:::0;:99;3182:372:::3;3593:14;:41:::0;;;3667:9:::3;::::0;::::3;;3644:20:::0;:32;3714:14:::3;::::0;::::3;;3686:25:::0;:42;3766:48:::3;::::0;::::3;::::0;::::3;::::0;3782:10:::3;::::0;3667:3;;3766:48:::3;:::i;:::-;;;;;;;;-1:-1:-1::0;;307:1:17::1;576:4;:11:::0;-1:-1:-1;;;;;2418:1403:10:o;1238:218:11:-;1394:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1424:25:11::2;;::::0;;;:16:::2;:25;::::0;;;;;;1238:218::o;1959:209:10:-;2110:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2140:21:10::2;;::::0;;;:12:::2;:21;::::0;;;;;;1959:209::o;2026:236:11:-;2195:7;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2225:23:11;;::::2;;::::0;;;:14:::2;:23;::::0;;;;;;;:30;;;::::2;::::0;;;;;;;;;2026:236::o;1874:172:12:-;2004:7;1024:4;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;2034:5:12::2;::::0;-1:-1:-1;;;;;2034:5:12::2;1874:172:::0;:::o;1749:204:10:-;1888:21;;:::i;:::-;1024:4:12;-1:-1:-1;;;;;1033:17:12;1016:34;;;995:107;;;;-1:-1:-1;;;995:107:12;;;;;;;:::i;:::-;307:1:17::1;646:4;;:12;638:56;;;;-1:-1:-1::0;;;638:56:17::1;;;;;;;:::i;:::-;-1:-1:-1::0;1925:21:10::2;::::0;;::::2;::::0;::::2;::::0;;1932:14:::2;1925:21:::0;;;;;::::2;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;1749:204;:::o;356:19:17:-;;;;:::o;13483:169:10:-;13589:7;13640:3;13629:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;13619:26;;;;;;13612:33;;13483:169;;;:::o;548:229:33:-;686:4;757:13;-1:-1:-1;;;;;709:61:33;:44;737:4;743:9;709:27;:44::i;:::-;-1:-1:-1;;;;;709:61:33;;;548:229;-1:-1:-1;;;;548:229:33:o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:5;;;;;;;:::i;:::-;1042:1;874:176;-1:-1:-1;;;874:176:5:o;1706:314:11:-;1822:9;1817:197;1841:1;1837;:5;1817:197;;;1880:14;;1863;;1895:1;1880:17;;;;;;;;;;;;-1:-1:-1;1915:10:11;;1911:93;;1945:44;1958:7;1967;:10;;;1978:1;1967:13;;;;;;;;;;;1982:6;1945:12;:44::i;:::-;-1:-1:-1;1844:3:11;;1817:197;;3481:161:14;3580:7;3631:2;3620:14;;;;;;;;:::i;2939:536::-;3113:18;3167:27;3196:6;3156:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3146:58;;;;;;3113:91;;3235:48;3261:14;;3235:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3277:5:14;;3235:10;;:48;-1:-1:-1;;;;;;3277:5:14;;-1:-1:-1;3235:25:14;:48::i;:::-;3214:125;;;;-1:-1:-1;;;3214:125:14;;;;;;;:::i;:::-;3370:44;3396:12;;3370:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3410:3:14;;3370:10;;:44;-1:-1:-1;;;;;;3410:3:14;;-1:-1:-1;3370:25:14;:44::i;:::-;3349:119;;;;-1:-1:-1;;;3349:119:14;;;;;;;:::i;:::-;2939:536;;;;;;:::o;2268:455:11:-;2379:7;2664:52;2673:9;2684:31;2707:7;2684:22;:31::i;:::-;2664:8;:52::i;2729:311::-;2861:33;2878:7;2887:6;2861:16;:33::i;:::-;2925:57;2955:7;2964:9;2975:6;2925:29;:57::i;:::-;2904:129;;;;-1:-1:-1;;;2904:129:11;;;;;;;:::i;382:54:17:-;307:1;418:4;:11;382:54::o;13310:167:10:-;13414:7;13465:3;13454:15;;;;;;;;:::i;13104:200::-;13152:4;13221:15;13187:14;:30;;;:49;;:110;;;;-1:-1:-1;13270:27:10;;13252:15;:45;13187:110;13168:129;;13104:200;:::o;1021:155:13:-;-1:-1:-1;;;;;1147:22:13;1117:7;1147:22;;;:13;:22;;;;;;;1021:155::o;1495:251::-;-1:-1:-1;;;;;1717:22:13;;1589:7;1717:22;;;:13;:22;;;;;;;;;1677:16;:25;;;;;;1631:31;1731:7;1631:22;:31::i;:::-;:71;:108;;1495:251;-1:-1:-1;;1495:251:13:o;634:157:36:-;695:7;728:5;;;750:8;;;;:34;;-1:-1:-1;;750:34:36;743:41;634:157;-1:-1:-1;;;;634:157:36:o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;12701:262:10:-;12857:37;12876:5;;12857:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12883:4:10;;-1:-1:-1;12889:4:10;;-1:-1:-1;12857:18:10;;-1:-1:-1;12857:37:10:i;:::-;12836:120;;;;-1:-1:-1;;;12836:120:10;;;;;;;:::i;:::-;12701:262;;;;:::o;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1200:442:34:-;1346:4;1381:254;1407:7;1538:6;1566:9;1597:6;1432:189;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1432:189:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:189:34;-1:-1:-1;;;1432:189:34;;;1381:8;:254::i;:::-;1362:273;1200:442;-1:-1:-1;;;;;1200:442:34:o;1462:238:11:-;-1:-1:-1;;;;;1644:23:11;;;;;;;:14;:23;;;;;;;;:34;;;;;;;;;;:49;;1686:6;1644:41;:49::i;:::-;-1:-1:-1;;;;;1585:23:11;;;;;;;:14;:23;;;;;;;;:56;;;;;;;;;;;;;;:108;;;;-1:-1:-1;1462:238:11:o;12104:591:10:-;12318:18;12372:27;12401:7;12361:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12351:59;;;;;;12318:92;;12441:52;12467:14;;12441:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12483:9:10;;-1:-1:-1;;;12483:9:10;;;;;;;:::i;:::-;12441:10;;:52;:25;:52::i;:::-;12420:132;;;;-1:-1:-1;;;12420:132:10;;;;;;;:::i;:::-;12583:48;12609:12;;12583:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12623:7:10;;-1:-1:-1;;;12623:7:10;;;;;;;:::i;12583:48::-;12562:126;;;;-1:-1:-1;;;12562:126:10;;;;;;;:::i;:::-;12104:591;;;;;;;:::o;12969:129::-;13061:30;;13043:15;:48;12969:129;:::o;2180:459:5:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:5;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:5;;;;;;;:::i;783:246:33:-;905:7;928:14;945:28;968:4;945:22;:28::i;:::-;928:45;;990:32;1004:6;1012:9;990:13;:32::i;763:223:32:-;826:7;864:16;872:7;864;:16::i;:::-;:115;;939:40;;-1:-1:-1;;;939:40:32;;-1:-1:-1;;;;;939:25:32;;;;;:40;;973:4;;939:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;864:115;;;-1:-1:-1;899:21:32;;763:223;-1:-1:-1;763:223:32:o;391:104:4:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:4;;391:104;-1:-1:-1;391:104:4:o;1112:120:11:-;-1:-1:-1;;;;;1190:25:11;;;;;;;:16;:25;;;;;:35;;;;;;;1112:120::o;2263:307:32:-;2401:4;2436:16;2444:7;2436;:16::i;:::-;:127;;2522:41;2536:7;2545:9;2556:6;2522:13;:41::i;:::-;2436:127;;;2471:32;2485:9;2496:6;2471:13;:32::i;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:5;;;1746:187::o;497:779:3:-;588:4;627;588;642:515;666:5;:12;662:1;:16;642:515;;;699:20;722:5;728:1;722:8;;;;;;;;;;;;;;699:31;;765:12;749;:28;745:402;;917:12;931;900:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;890:55;;;;;;875:70;;745:402;;;1104:12;1118;1087:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1077:55;;;;;;1062:70;;745:402;-1:-1:-1;680:3:3;;642:515;;;-1:-1:-1;1249:20:3;;;;497:779;-1:-1:-1;;;497:779:3:o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;1035:303:33:-;1128:7;1325:4;1274:56;;;;;;;;:::i;1064:2068:2:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:2;;;;;;;:::i;1199:94::-;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:2;;;;;;;:::i;2642:154::-;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:2;;;;;;;:::i;2806:93::-;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:2;;-1:-1:-1;;3010:24:2;;;-1:-1:-1;;;;;;;3052:20:2;;3044:57;;;;-1:-1:-1;;;3044:57:2;;;;;;;:::i;:::-;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:2:o;1291:198:32:-;1414:4;1437:45;1455:7;1464:9;1475:6;1437:17;:45::i;992:293::-;1092:4;1113:12;1127:23;1166:9;-1:-1:-1;;;;;1166:14:32;1188:6;1166:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:87;;;;1209:48;1237:7;1246:10;1209:27;:48::i;:::-;-1:-1:-1;1274:4:32;;992:293;-1:-1:-1;;;;992:293:32:o;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;1648:374:34;1766:4;1801:214;1827:7;1946:9;1977:6;1852:149;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1852:149:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1852:149:34;-1:-1:-1;;;1852:149:34;;;1801:8;:214::i;-1:-1:-1:-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;:::i;470:352::-;;;600:3;593:4;585:6;581:17;577:27;567:2;;-1:-1;;608:12;567:2;-1:-1;638:20;;-1:-1;;;;;667:30;;664:2;;;-1:-1;;700:12;664:2;744:4;736:6;732:17;720:29;;795:3;744:4;;779:6;775:17;736:6;761:32;;758:41;755:2;;;812:1;;802:12;755:2;560:262;;;;;:::o;857:640::-;;980:3;973:4;965:6;961:17;957:27;947:2;;-1:-1;;988:12;947:2;1041:86;85749:17;1041:86;:::i;:::-;1032:95;;1133:16;1192:17;1250:3;85749:17;1225:3;1221:27;1218:36;1215:2;;;1267:1;;1257:12;1215:2;1292:1;1277:214;1022:4;1299:1;1296:13;1277:214;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;1370:58;;85761:4;1442:14;;;;1470;;;;;1324:1;1317:9;1277:214;;;1281:14;;;940:557;;;;:::o;4552:336::-;;;4666:3;4659:4;4651:6;4647:17;4643:27;4633:2;;-1:-1;;4674:12;4633:2;-1:-1;4704:20;;-1:-1;;;;;4733:30;;4730:2;;;-1:-1;;4766:12;4730:2;4810:4;4802:6;4798:17;4786:29;;4861:3;4810:4;4841:17;4802:6;4827:32;;4824:41;4821:2;;;4878:1;;4868:12;4917:521;;5031:4;5019:9;5014:3;5010:19;5006:30;5003:2;;;-1:-1;;5039:12;5003:2;5067:20;5082:4;5067:20;:::i;:::-;5058:29;;2714:3;2707:4;2699:6;2695:17;2691:27;2681:2;;-1:-1;;2722:12;2681:2;2775:78;5082:4;2775:78;:::i;:::-;2859:16;2918:17;5082:4;2951:3;2947:27;2976:3;2947:27;2944:36;2941:2;;;-1:-1;;2983:12;2941:2;-1:-1;3003:206;2756:4;3025:1;3022:13;3003:206;;;6741:20;;3096:50;;85761:4;3160:14;;;;3188;;;;3050:1;3043:9;3003:206;;;3007:14;5171:72;5153:16;5146:98;5336:80;5412:3;5388:22;5336:80;:::i;:::-;85761:4;5322:5;5318:16;5311:106;;;;;4997:441;;;;:::o;6075:168::-;;6195:3;6186:6;6181:3;6177:16;6173:26;6170:2;;;-1:-1;;6202:12;6170:2;-1:-1;6222:15;6163:80;-1:-1;6163:80::o;6299:169::-;;6420:3;6411:6;6406:3;6402:16;6398:26;6395:2;;;-1:-1;;6427:12;6503:164;;6619:3;6610:6;6605:3;6601:16;6597:26;6594:2;;;-1:-1;;6626:12;6952:241;;7056:2;7044:9;7035:7;7031:23;7027:32;7024:2;;;-1:-1;;7062:12;7024:2;85:6;72:20;97:33;124:5;97:33;:::i;7464:366::-;;;7585:2;7573:9;7564:7;7560:23;7556:32;7553:2;;;-1:-1;;7591:12;7553:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7643:63;-1:-1;7743:2;7782:22;;72:20;97:33;72:20;97:33;:::i;:::-;7751:63;;;;7547:283;;;;;:::o;7837:507::-;;;;7983:2;7971:9;7962:7;7958:23;7954:32;7951:2;;;-1:-1;;7989:12;7951:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8041:63;-1:-1;8141:2;8188:22;;217:20;242:41;217:20;242:41;:::i;:::-;7945:399;;8149:71;;-1:-1;;;8257:2;8296:22;;;;6741:20;;7945:399::o;8351:507::-;;;;8497:2;8485:9;8476:7;8472:23;8468:32;8465:2;;;-1:-1;;8503:12;8465:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8555:63;-1:-1;8655:2;8694:22;;72:20;97:33;72:20;97:33;:::i;:::-;8663:63;-1:-1;8763:2;8810:22;;217:20;242:41;217:20;242:41;:::i;:::-;8771:71;;;;8459:399;;;;;:::o;8865:417::-;;;9011:3;8999:9;8990:7;8986:23;8982:33;8979:2;;;-1:-1;;9018:12;8979:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9070:63;-1:-1;9188:78;9258:7;9170:2;9234:22;;9188:78;:::i;:::-;9178:88;;8973:309;;;;;:::o;9289:366::-;;;9410:2;9398:9;9389:7;9385:23;9381:32;9378:2;;;-1:-1;;9416:12;9378:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9468:63;9568:2;9607:22;;;;6741:20;;-1:-1;;;9372:283::o;9662:257::-;;9774:2;9762:9;9753:7;9749:23;9745:32;9742:2;;;-1:-1;;9780:12;9742:2;4347:6;4341:13;96050:5;93282:13;93275:21;96028:5;96025:32;96015:2;;-1:-1;;96061:12;9926:241;;10030:2;10018:9;10009:7;10005:23;10001:32;9998:2;;;-1:-1;;10036:12;9998:2;-1:-1;4468:20;;9992:175;-1:-1;9992:175::o;10174:292::-;;10303:3;10291:9;10282:7;10278:23;10274:33;10271:2;;;-1:-1;;10310:12;10271:2;10372:78;10442:7;10418:22;10372:78;:::i;10473:314::-;;10613:3;10601:9;10592:7;10588:23;10584:33;10581:2;;;-1:-1;;10620:12;10581:2;5627:20;5642:4;5627:20;:::i;:::-;3368:3;3361:4;3353:6;3349:17;3345:27;3335:2;;-1:-1;;3376:12;3335:2;3429:78;5642:4;3429:78;:::i;:::-;3513:16;3572:17;5642:4;3605:3;3601:27;3630:3;3601:27;3598:36;3595:2;;;-1:-1;;3637:12;3595:2;-1:-1;3657:217;3410:4;3679:1;3676:13;3657:217;;;6889:13;;3750:61;;85761:4;3825:14;;;;3853;;;;3704:1;3697:9;3657:217;;;3661:14;5731:83;5713:16;5706:109;1666:3;1647:17;3605:3;1647:17;1643:27;1633:2;;-1:-1;;1674:12;1633:2;1727:86;5642:4;1727:86;:::i;:::-;1819:16;-1:-1;1819:16;;-1:-1;1878:17;-1:-1;10613:3;1907:27;;1904:36;-1:-1;1901:2;;;-1:-1;;1943:12;1901:2;-1:-1;1963:225;3410:4;1985:1;1982:13;1963:225;;;387:6;381:13;399:41;434:5;399:41;:::i;:::-;2056:69;;85761:4;2139:14;;;;2167;;;;;3704:1;2003:9;1963:225;;;-1:-1;;85761:4;5889:16;;5882:117;-1:-1;5893:5;10575:212;-1:-1;;;10575:212::o;10794:961::-;;;;;;11038:2;11026:9;11017:7;11013:23;11009:32;11006:2;;;-1:-1;;11044:12;11006:2;11102:17;11089:31;-1:-1;;;;;11140:18;11132:6;11129:30;11126:2;;;-1:-1;;11162:12;11126:2;11192:89;11273:7;11264:6;11253:9;11249:22;11192:89;:::i;:::-;11182:99;;11346:2;11335:9;11331:18;11318:32;11304:46;;11140:18;11362:6;11359:30;11356:2;;;-1:-1;;11392:12;11356:2;11430:80;11502:7;11493:6;11482:9;11478:22;11430:80;:::i;:::-;11412:98;;-1:-1;11412:98;-1:-1;11575:2;11560:18;;11547:32;;-1:-1;11588:30;;;11585:2;;;-1:-1;;11621:12;11585:2;;11659:80;11731:7;11722:6;11711:9;11707:22;11659:80;:::i;:::-;11000:755;;;;-1:-1;11000:755;;-1:-1;11641:98;;;11000:755;-1:-1;;;11000:755::o;11762:897::-;;;;;;11974:2;11962:9;11953:7;11949:23;11945:32;11942:2;;;-1:-1;;11980:12;11942:2;12038:17;12025:31;-1:-1;;;;;12076:18;12068:6;12065:30;12062:2;;;-1:-1;;12098:12;12062:2;12128:89;12209:7;12200:6;12189:9;12185:22;12128:89;:::i;:::-;12118:99;;12282:2;12271:9;12267:18;12254:32;12240:46;;12076:18;12298:6;12295:30;12292:2;;;-1:-1;;12328:12;12292:2;12366:64;12422:7;12413:6;12402:9;12398:22;12366:64;:::i;:::-;12348:82;;-1:-1;12348:82;-1:-1;12495:2;12480:18;;12467:32;;-1:-1;12508:30;;;12505:2;;;-1:-1;;12541:12;12505:2;;12579:64;12635:7;12626:6;12615:9;12611:22;12579:64;:::i;12666:598::-;;;;12859:3;12847:9;12838:7;12834:23;12830:33;12827:2;;;-1:-1;;12866:12;12827:2;12928:90;13010:7;12986:22;12928:90;:::i;:::-;12918:100;;13083:3;13072:9;13068:19;13055:33;-1:-1;;;;;13100:6;13097:30;13094:2;;;-1:-1;;13130:12;13094:2;13168:80;13240:7;13231:6;13220:9;13216:22;13168:80;:::i;:::-;12821:443;;13150:98;;-1:-1;13150:98;;-1:-1;;;;12821:443::o;13271:1066::-;;;;;;;;13520:3;13508:9;13499:7;13495:23;13491:33;13488:2;;;-1:-1;;13527:12;13488:2;13589:90;13671:7;13647:22;13589:90;:::i;:::-;13579:100;;13744:3;13733:9;13729:19;13716:33;-1:-1;;;;;13769:18;13761:6;13758:30;13755:2;;;-1:-1;;13791:12;13755:2;13829:64;13885:7;13876:6;13865:9;13861:22;13829:64;:::i;:::-;13811:82;;-1:-1;13811:82;-1:-1;13958:3;13943:19;;13930:33;;-1:-1;13972:30;;;13969:2;;;-1:-1;;14005:12;13969:2;14043:64;14099:7;14090:6;14079:9;14075:22;14043:64;:::i;:::-;14025:82;;-1:-1;14025:82;-1:-1;14172:3;14157:19;;14144:33;;-1:-1;14186:30;;;14183:2;;;-1:-1;;14219:12;14183:2;;14257:64;14313:7;14304:6;14293:9;14289:22;14257:64;:::i;:::-;13482:855;;;;-1:-1;13482:855;;-1:-1;13482:855;;;;14239:82;;-1:-1;;;13482:855::o;14344:391::-;;14480:2;14468:9;14459:7;14455:23;14451:32;14448:2;;;-1:-1;;14486:12;14448:2;14544:17;14531:31;-1:-1;;;;;14574:6;14571:30;14568:2;;;-1:-1;;14604:12;14568:2;14634:85;14711:7;14702:6;14691:9;14687:22;14634:85;:::i;14742:889::-;;;;;;14950:2;14938:9;14929:7;14925:23;14921:32;14918:2;;;-1:-1;;14956:12;14918:2;15014:17;15001:31;-1:-1;;;;;15052:18;15044:6;15041:30;15038:2;;;-1:-1;;15074:12;15038:2;15104:85;15181:7;15172:6;15161:9;15157:22;15104:85;:::i;15638:263::-;;15753:2;15741:9;15732:7;15728:23;15724:32;15721:2;;;-1:-1;;15759:12;15721:2;-1:-1;6889:13;;15715:186;-1:-1;15715:186::o;16921:127::-;-1:-1;;;;;93600:54;16998:45;;16992:56::o;17316:645::-;;88005:6;88000:3;87993:19;88042:4;;88037:3;88033:14;17453:83;;17621:21;-1:-1;17648:291;17673:6;17670:1;17667:13;17648:291;;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;93600:54;16998:45;;16276:14;;;;89825:12;;;;678:18;17688:9;17648:291;;;-1:-1;17945:10;;17440:521;-1:-1;;;;;17440:521::o;20285:855::-;;88005:6;88000:3;87993:19;88042:4;;88037:3;88033:14;20474:108;;20694:21;-1:-1;20721:397;20746:6;20743:1;20740:13;20721:397;;;21327:4;;94440:3;94435;94422:30;94483:16;;;94476:27;;;41027:16;;;;-1:-1;;19138:321;86750:4;19160:1;19157:13;19138:321;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;-1:-1;;;;;93600:54;16998:45;;89969:12;;;;678:18;19178:9;;;;;16094:14;;19138:321;;;-1:-1;;;16571:4;16562:14;;;;87745;;;;;20768:1;20761:9;20721:397;;22058:447;87993:19;;;22058:447;-1:-1;;;;;22286:78;;22283:2;;;-1:-1;;22367:12;22283:2;88042:4;22402:6;22398:17;94445:6;94440:3;88042:4;88037:3;88033:14;94422:30;94483:16;;;;88042:4;94483:16;94476:27;;;-1:-1;94483:16;;22180:325;-1:-1;22180:325::o;23137:277::-;;88005:6;88000:3;87993:19;94445:6;94440:3;88042:4;88037:3;88033:14;94422:30;-1:-1;88042:4;94492:6;88037:3;94483:16;;94476:27;88042:4;95457:7;;95461:2;23400:6;95441:14;95437:28;88037:3;23369:39;;23362:46;;23227:187;;;;;:::o;24091:343::-;;24233:5;87096:12;88005:6;88000:3;87993:19;24326:52;24371:6;88042:4;88037:3;88033:14;88042:4;24352:5;24348:16;24326:52;:::i;:::-;95457:7;95441:14;-1:-1;;95437:28;24390:39;;;;88042:4;24390:39;;24181:253;-1:-1;;24181:253::o;40506:692::-;21327:4;94440:3;94435;94422:30;94501:1;21327:4;94483:16;;;94476:27;;;41027:16;;;;19138:321;86750:4;19160:1;19157:13;19138:321;;;89978:2;230:6;217:20;242:41;277:5;242:41;:::i;:::-;-1:-1;;;;;93600:54;16998:45;;89969:12;;;;16094:14;;;;678:18;19178:9;19138:321;;;19142:14;;;40614:584;;:::o;43750:1345::-;43987:23;;22786:37;;44227:4;44216:16;;44210:23;44377:4;44368:14;;22786:37;44455:4;44444:16;;44438:23;44605:4;44596:14;;22786:37;44688:4;44677:16;;44671:23;44838:4;44829:14;;22786:37;44918:4;44907:16;44901:23;45068:4;45059:14;;;22786:37;43877:1218::o;45191:3170::-;;45362:6;89834:2;45473:16;89825:12;45496:63;45544:14;89799:39;89825:12;45473:16;89799:39;:::i;:::-;45496:63;:::i;:::-;45622:50;45655:16;45648:5;45622:50;:::i;:::-;45602:70;;45678:63;89834:2;45730:3;45726:14;45712:12;45678:63;:::i;:::-;;45802:50;45846:4;45839:5;45835:16;45828:5;45802:50;:::i;:::-;45858:63;45846:4;45910:3;45906:14;45892:12;45858:63;:::i;:::-;;46001:77;46072:4;46065:5;46061:16;46054:5;46001:77;:::i;:::-;45362:6;46072:4;46102:3;46098:14;46091:38;46144:119;45362:6;45357:3;45353:16;46244:12;46230;46144:119;:::i;:::-;46136:127;;;;46349:104;46447:4;46440:5;46436:16;46429:5;46349:104;:::i;:::-;46499:3;46493:4;46489:14;46447:4;46477:3;46473:14;46466:38;46519:171;46685:4;46671:12;46657;46519:171;:::i;:::-;46511:179;;;;46786:77;46857:4;46850:5;46846:16;46839:5;46786:77;:::i;:::-;46909:3;46903:4;46899:14;46857:4;46887:3;46883:14;46876:38;46929:119;47043:4;47029:12;47015;46929:119;:::i;:::-;46921:127;;;;47144:77;47215:4;47208:5;47204:16;47197:5;47144:77;:::i;:::-;47267:3;47261:4;47257:14;47215:4;47245:3;47241:14;47234:38;47287:119;47401:4;47387:12;47373;47287:119;:::i;:::-;47279:127;;;;47496:77;47567:4;47560:5;47556:16;47549:5;47496:77;:::i;:::-;47619:3;47613:4;47609:14;47567:4;47597:3;47593:14;47586:38;47639:119;47753:4;47739:12;47725;47639:119;:::i;:::-;47873:6;47862:18;;;6741:20;47935:16;;;22786:37;48059:6;48048:18;;;6741:20;48121:16;;;22786:37;48250:6;48239:18;;;4468:20;48312:16;;;;22786:37;;;;-1:-1;47631:127;;45335:3026;-1:-1;;;45335:3026::o;48459:1977::-;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;93600:54;;;16998:45;;89834:2;89825:12;;;4468:20;48993:14;;;22786:37;49128:4;49117:16;;72:20;;97:33;72:20;97:33;:::i;:::-;93600:54;49128:4;49188:14;;16998:45;49270:50;49314:4;49303:16;;49307:5;49270:50;:::i;:::-;49326:63;49314:4;49378:3;49374:14;49360:12;49326:63;:::i;:::-;;49456:50;49500:4;49493:5;49489:16;49482:5;49456:50;:::i;:::-;49512:63;49500:4;49564:3;49560:14;49546:12;49512:63;:::i;:::-;;49640:50;49684:4;49677:5;49673:16;49666:5;49640:50;:::i;:::-;49696:63;49684:4;49748:3;49744:14;49730:12;49696:63;:::i;:::-;;49907:115;49895:4;50011:3;50007:14;49895:4;49888:5;49884:16;49907:115;:::i;:::-;50139:6;50128:18;;;6741:20;50201:16;;;22786:37;50336:6;50325:18;;;4468:20;50398:16;;22786:37;48597:1839::o;51300:896::-;51544:23;;22786:37;;51800:4;51789:16;;51783:23;51950:4;51941:14;;22786:37;52028:4;52017:16;52011:23;92811:4;92800:16;93282:13;93275:21;52169:4;52160:14;;;22568:34;51433:763::o;52252:1632::-;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;93600:54;;;16998:45;;89834:2;89825:12;;72:20;;97:33;72:20;97:33;:::i;:::-;93600:54;;;89834:2;52779:14;;16998:45;89825:12;;;72:20;;97:33;72:20;97:33;:::i;:::-;93611:42;93604:5;93600:54;89825:12;52993:3;52989:14;16998:45;53112:4;53105:5;53101:16;6741:20;53112:4;53176:3;53172:14;22786:37;53294:4;53287:5;53283:16;6741:20;53294:4;53358:3;53354:14;22786:37;53477:4;53470:5;53466:16;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;93600:54;53477:4;53537:14;;16998:45;53687:4;53676:16;;92083:17;92148:14;92144:29;;;-1:-1;;92140:48;92116:73;;92106:2;;-1:-1;;92193:12;92106:2;92222:33;;92277:19;;-1:-1;;;;;92336:30;;92333:2;;;-1:-1;;92369:12;92333:2;92426:17;92148:14;92406:38;92396:8;92392:53;92389:2;;;-1:-1;;92448:12;92389:2;52415:4;53687;53717:3;53713:14;53706:38;53759:87;52415:4;52410:3;52406:14;53827:12;89834:2;92315:5;92311:16;53759:87;:::i;54235:392::-;22786:37;;;54488:2;54479:12;;22786:37;54590:12;;;54379:248::o;54634:291::-;;94445:6;94440:3;94435;94422:30;94483:16;;94476:27;;;94483:16;54778:147;-1:-1;54778:147::o;54932:271::-;;24601:5;87096:12;24712:52;24757:6;24752:3;24745:4;24738:5;24734:16;24712:52;:::i;:::-;24776:16;;;;;55066:137;-1:-1;;55066:137::o;55210:520::-;36176:66;36156:87;;36140:2;36262:12;;22786:37;;;;55693:12;;;55427:303::o;55737:379::-;56101:10;55925:191::o;56123:222::-;-1:-1;;;;;93600:54;;;;16998:45;;56250:2;56235:18;;56221:124::o;56352:771::-;-1:-1;;;;;93600:54;;16851:58;;56674:3;56801:2;56786:18;;56779:48;;;56352:771;;56841:128;;56659:19;;56955:6;56841:128;:::i;:::-;56833:136;;56980:133;57109:2;57098:9;57094:18;57085:6;56980:133;:::i;57130:1051::-;-1:-1;;;;;93600:54;;16851:58;;57540:3;57667:2;57652:18;;57645:48;;;57130:1051;;57707:128;57525:19;;;57821:6;57707:128;:::i;:::-;57699:136;;57846:133;57975:2;57964:9;57960:18;57951:6;57846:133;:::i;:::-;58028:9;58022:4;58018:20;58012:3;58001:9;57997:19;57990:49;58053:118;58166:4;58157:6;58149;58053:118;:::i;:::-;58045:126;57511:670;-1:-1;;;;;;;;57511:670::o;58188:740::-;-1:-1;;;;;93600:54;;16851:58;;58518:3;58503:19;;58623:144;58763:2;58748:18;;58739:6;58623:144;:::i;:::-;58778:140;58913:3;58902:9;58898:19;58889:6;58778:140;:::i;58935:1384::-;-1:-1;;;;;93600:54;;16851:58;;58935:1384;59455:3;59700:2;59560:144;59685:18;;;59676:6;59560:144;:::i;:::-;59715:140;59850:3;59839:9;59835:19;59826:6;59715:140;:::i;:::-;59455:3;59888;59877:9;59873:19;59866:49;59929:86;59455:3;59444:9;59440:19;60001:6;59993;59929:86;:::i;:::-;59921:94;;60064:9;60058:4;60054:20;60048:3;60037:9;60033:19;60026:49;60089:86;60170:4;60161:6;60153;60089:86;:::i;:::-;42203:23;;60081:94;;-1:-1;42203:23;-1:-1;21764:1;60304:3;60289:19;;21749:258;86750:4;21771:1;21768:13;21749:258;;;21835:13;;22786:37;;87357:14;;;;21796:1;21789:9;;;;;16744:14;;21749:258;;;21753:14;;59700:2;42411:5;42407:16;42401:23;42381:43;;42540:14;60293:9;42540:14;21764:1;19938:282;86750:4;19960:1;19957:13;19938:282;;;93074:24;20030:6;20024:13;93074:24;:::i;:::-;16998:45;;87357:14;;;;16094;;;;21796:1;19978:9;19938:282;;;19942:14;;;;59426:893;;;;;;;;;;;:::o;60326:444::-;-1:-1;;;;;93600:54;;;16998:45;;93600:54;;;;60673:2;60658:18;;16998:45;60756:2;60741:18;;22786:37;;;;60509:2;60494:18;;60480:290::o;60777:333::-;-1:-1;;;;;93600:54;;;;16998:45;;61096:2;61081:18;;22786:37;60932:2;60917:18;;60903:207::o;61117:210::-;93282:13;;93275:21;22568:34;;61238:2;61223:18;;61209:118::o;61334:548::-;22786:37;;;92811:4;92800:16;;;;61702:2;61687:18;;54188:35;61785:2;61770:18;;22786:37;61868:2;61853:18;;22786:37;61541:3;61526:19;;61512:370::o;61889:736::-;;62146:2;62167:17;62160:47;62221:76;62146:2;62135:9;62131:18;62283:6;62221:76;:::i;:::-;62345:9;62339:4;62335:20;62330:2;62319:9;62315:18;62308:48;62370:86;62451:4;62442:6;62434;62370:86;:::i;:::-;62362:94;;62504:9;62498:4;62494:20;62489:2;62478:9;62474:18;62467:48;62529:86;62610:4;62601:6;62593;62529:86;:::i;62632:367::-;62804:2;62789:18;;95676:1;95666:12;;95656:2;;95682:9;95656:2;24892:67;;;62985:2;62970:18;22786:37;62775:224;:::o;63006:310::-;;63153:2;63174:17;63167:47;63228:78;63153:2;63142:9;63138:18;63292:6;63228:78;:::i;63323:416::-;63523:2;63537:47;;;25550:2;63508:18;;;87993:19;25586:26;88033:14;;;25566:47;25632:12;;;63494:245::o;63746:416::-;63946:2;63960:47;;;25883:2;63931:18;;;87993:19;25919:34;88033:14;;;25899:55;-1:-1;;;25974:12;;;25967:28;26014:12;;;63917:245::o;64169:416::-;64369:2;64383:47;;;26265:2;64354:18;;;87993:19;26301:32;88033:14;;;26281:53;26353:12;;;64340:245::o;64592:416::-;64792:2;64806:47;;;26604:2;64777:18;;;87993:19;26640:31;88033:14;;;26620:52;26691:12;;;64763:245::o;65015:416::-;65215:2;65229:47;;;26942:2;65200:18;;;87993:19;-1:-1;;;88033:14;;;26958:41;27018:12;;;65186:245::o;65438:416::-;65638:2;65652:47;;;27269:2;65623:18;;;87993:19;27305:33;88033:14;;;27285:54;27358:12;;;65609:245::o;65861:416::-;66061:2;66075:47;;;27609:2;66046:18;;;87993:19;27645:31;88033:14;;;27625:52;27696:12;;;66032:245::o;66284:416::-;66484:2;66498:47;;;66469:18;;;87993:19;27983:34;88033:14;;;27963:55;28037:12;;;66455:245::o;66707:416::-;66907:2;66921:47;;;28288:2;66892:18;;;87993:19;28324:33;88033:14;;;28304:54;28377:12;;;66878:245::o;67130:416::-;67330:2;67344:47;;;28628:2;67315:18;;;87993:19;28664:31;88033:14;;;28644:52;28715:12;;;67301:245::o;67553:416::-;67753:2;67767:47;;;28966:2;67738:18;;;87993:19;29002:27;88033:14;;;28982:48;29049:12;;;67724:245::o;67976:416::-;68176:2;68190:47;;;29300:2;68161:18;;;87993:19;29336:33;88033:14;;;29316:54;29389:12;;;68147:245::o;68399:416::-;68599:2;68613:47;;;29640:2;68584:18;;;87993:19;29676:29;88033:14;;;29656:50;29725:12;;;68570:245::o;68822:416::-;69022:2;69036:47;;;29976:2;69007:18;;;87993:19;30012:34;88033:14;;;29992:55;-1:-1;;;30067:12;;;30060:33;30112:12;;;68993:245::o;69245:416::-;69445:2;69459:47;;;30363:2;69430:18;;;87993:19;30399:33;88033:14;;;30379:54;30452:12;;;69416:245::o;69668:416::-;69868:2;69882:47;;;30703:2;69853:18;;;87993:19;30739:33;88033:14;;;30719:54;30792:12;;;69839:245::o;70091:416::-;70291:2;70305:47;;;31043:2;70276:18;;;87993:19;31079:34;88033:14;;;31059:55;-1:-1;;;31134:12;;;31127:26;31172:12;;;70262:245::o;70514:416::-;70714:2;70728:47;;;31423:2;70699:18;;;87993:19;31459:34;88033:14;;;31439:55;-1:-1;;;31514:12;;;31507:32;31558:12;;;70685:245::o;70937:416::-;71137:2;71151:47;;;31809:2;71122:18;;;87993:19;31845:30;88033:14;;;31825:51;31895:12;;;71108:245::o;71360:416::-;71560:2;71574:47;;;32146:2;71545:18;;;87993:19;32182:30;88033:14;;;32162:51;32232:12;;;71531:245::o;71783:416::-;71983:2;71997:47;;;32483:2;71968:18;;;87993:19;32519:34;88033:14;;;32499:55;-1:-1;;;32574:12;;;32567:25;32611:12;;;71954:245::o;72206:416::-;72406:2;72420:47;;;32862:2;72391:18;;;87993:19;32898:31;88033:14;;;32878:52;32949:12;;;72377:245::o;72629:416::-;72829:2;72843:47;;;33200:2;72814:18;;;87993:19;33236:28;88033:14;;;33216:49;33284:12;;;72800:245::o;73052:416::-;73252:2;73266:47;;;33535:2;73237:18;;;87993:19;33571:34;88033:14;;;33551:55;-1:-1;;;33626:12;;;33619:26;33664:12;;;73223:245::o;73475:416::-;73675:2;73689:47;;;33915:2;73660:18;;;87993:19;33951:34;88033:14;;;33931:55;-1:-1;;;34006:12;;;33999:25;34043:12;;;73646:245::o;73898:416::-;74098:2;74112:47;;;34294:2;74083:18;;;87993:19;34330:34;88033:14;;;34310:55;-1:-1;;;34385:12;;;34378:29;34426:12;;;74069:245::o;74321:416::-;74521:2;74535:47;;;34677:2;74506:18;;;87993:19;34713:34;88033:14;;;34693:55;-1:-1;;;34768:12;;;34761:25;34805:12;;;74492:245::o;74744:416::-;74944:2;74958:47;;;35056:2;74929:18;;;87993:19;-1:-1;;;88033:14;;;35072:40;35131:12;;;74915:245::o;75167:416::-;75367:2;75381:47;;;35382:2;75352:18;;;87993:19;35418:33;88033:14;;;35398:54;35471:12;;;75338:245::o;75590:416::-;75790:2;75804:47;;;35722:2;75775:18;;;87993:19;35758:34;88033:14;;;35738:55;-1:-1;;;35813:12;;;35806:28;35853:12;;;75761:245::o;76013:416::-;76213:2;76227:47;;;36513:2;76198:18;;;87993:19;-1:-1;;;88033:14;;;36529:38;36586:12;;;76184:245::o;76436:416::-;76636:2;76650:47;;;36837:2;76621:18;;;87993:19;36873:32;88033:14;;;36853:53;36925:12;;;76607:245::o;76859:416::-;77059:2;77073:47;;;37176:2;77044:18;;;87993:19;37212:34;88033:14;;;37192:55;-1:-1;;;37267:12;;;37260:33;37312:12;;;77030:245::o;77282:416::-;77482:2;77496:47;;;37563:2;77467:18;;;87993:19;37599:26;88033:14;;;37579:47;37645:12;;;77453:245::o;77705:416::-;77905:2;77919:47;;;38201:2;77890:18;;;87993:19;-1:-1;;;88033:14;;;38217:45;38281:12;;;77876:245::o;78128:416::-;78328:2;78342:47;;;38532:2;78313:18;;;87993:19;38568:34;88033:14;;;38548:55;-1:-1;;;38623:12;;;38616:27;38662:12;;;78299:245::o;78551:416::-;78751:2;78765:47;;;38913:2;78736:18;;;87993:19;38949:34;88033:14;;;38929:55;-1:-1;;;39004:12;;;38997:25;39041:12;;;78722:245::o;78974:416::-;79174:2;79188:47;;;79159:18;;;87993:19;39328:34;88033:14;;;39308:55;39382:12;;;79145:245::o;79397:416::-;79597:2;79611:47;;;39633:2;79582:18;;;87993:19;39669:28;88033:14;;;39649:49;39717:12;;;79568:245::o;79820:416::-;80020:2;80034:47;;;80005:18;;;87993:19;40004:34;88033:14;;;39984:55;40058:12;;;79991:245::o;80243:416::-;80443:2;80457:47;;;40309:2;80428:18;;;87993:19;40345:34;88033:14;;;40325:55;-1:-1;;;40400:12;;;40393:29;40441:12;;;80414:245::o;80666:327::-;80845:3;80830:19;;80860:123;80834:9;80956:6;80860:123;:::i;81000:351::-;;81191:3;81180:9;81176:19;81168:27;;42909:16;42903:23;22793:3;22786:37;43075:4;43068:5;43064:16;43058:23;43075:4;43139:3;43135:14;22786:37;43235:4;43228:5;43224:16;43218:23;43235:4;43299:3;43295:14;22786:37;43400:4;43393:5;43389:16;43383:23;43400:4;43464:3;43460:14;22786:37;43562:4;43555:5;43551:16;43545:23;43562:4;43626:3;43622:14;22786:37;81162:189;;;;:::o;81358:410::-;;81555:2;81576:17;81569:47;81630:128;81555:2;81544:9;81540:18;81744:6;81630:128;:::i;81775:367::-;81974:3;81959:19;;81989:143;81963:9;82105:6;81989:143;:::i;82149:354::-;50768:23;;22786:37;;50956:4;50945:16;;;50939:23;51016:14;;;22786:37;51116:4;51105:16;;;51099:23;93282:13;93275:21;51170:14;;;22568:34;;;;82342:2;82327:18;;82313:190::o;82510:394::-;;82699:2;82720:17;82713:47;82774:120;82699:2;82688:9;82684:18;82880:6;82774:120;:::i;82911:505::-;;83128:2;83149:17;83142:47;83203:120;83128:2;83117:9;83113:18;83309:6;83203:120;:::i;:::-;83195:128;;22816:5;83402:2;83391:9;83387:18;22786:37;83099:317;;;;;:::o;83423:222::-;22786:37;;;83550:2;83535:18;;83521:124::o;83652:522::-;;;83803:11;83790:25;92140:48;;83878:8;83862:14;83858:29;83854:48;83834:18;83830:73;83820:2;;-1:-1;;83907:12;83820:2;83934:33;;83988:18;;;-1:-1;;;;;;84015:30;;84012:2;;;-1:-1;;84048:12;84012:2;83893:4;84076:13;;;;-1:-1;84128:17;;83862:14;84108:38;84098:49;;84095:2;;;84160:1;;84150:12;84181:549;;;84359:11;84346:25;92140:48;;84434:8;84418:14;84414:29;84410:48;84390:18;84386:73;84376:2;;-1:-1;;84463:12;84376:2;84490:33;;84544:18;;;-1:-1;;;;;;84571:30;;84568:2;;;-1:-1;;84604:12;84568:2;84449:4;84632:13;;-1:-1;84696:4;84684:17;;84418:14;84664:38;84654:49;;84651:2;;;84716:1;;84706:12;85266:256;85328:2;85322:9;85354:17;;;-1:-1;;;;;85414:34;;85450:22;;;85411:62;85408:2;;;85486:1;;85476:12;85408:2;85328;85495:22;85306:216;;-1:-1;85306:216::o;89725:119::-;;85:6;72:20;97:33;124:5;97:33;:::i;89997:517::-;;;90137:3;90124:17;92140:48;;90205:8;90189:14;90185:29;90181:48;90161:18;90157:73;90147:2;;-1:-1;;90234:12;90147:2;90263:33;;90220:4;90352:16;;;-1:-1;90318:19;;-1:-1;;;;;;90377:30;;90374:2;;;90420:1;;90410:12;90374:2;90220:4;90471:6;90467:17;90189:14;90447:38;90437:8;90433:53;90430:2;;;90499:1;;90489:12;90648:544;;;90815:3;90802:17;92140:48;;90883:8;90867:14;90863:29;90859:48;90839:18;90835:73;90825:2;;-1:-1;;90912:12;90825:2;90941:33;;90898:4;91030:16;;;-1:-1;90996:19;;-1:-1;;;;;;91055:30;;91052:2;;;91098:1;;91088:12;91052:2;91157:4;91149:6;91145:17;90867:14;91125:38;91115:8;91111:53;91108:2;;;91177:1;;91167:12;93538:121;-1:-1;;;;;93600:54;;93583:76::o;94518:268::-;94583:1;94590:101;94604:6;94601:1;94598:13;94590:101;;;94671:11;;;94665:18;94652:11;;;94645:39;94626:2;94619:10;94590:101;;;94706:6;94703:1;94700:13;94697:2;;;-1:-1;;94583:1;94753:16;;94746:27;94567:219::o;95705:117::-;-1:-1;;;;;93600:54;;95764:35;;95754:2;;95813:1;;95803:12;95754:2;95748:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "3333800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "infinite",
                "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "infinite",
                "depositAlice(address,uint256)": "infinite",
                "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "infinite",
                "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "infinite",
                "exit(address,address,address)": "infinite",
                "getAlice()": "infinite",
                "getBob()": "infinite",
                "getChannelDispute()": "infinite",
                "getDefundNonce(address)": "infinite",
                "getExitableAmount(address,address)": "infinite",
                "getTotalDepositsAlice(address)": "infinite",
                "getTotalDepositsBob(address)": "infinite",
                "getTotalTransferred(address)": "infinite",
                "getTransferDispute(bytes32)": "infinite",
                "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "infinite",
                "lock()": "1160",
                "setup(address,address)": "infinite",
                "testMakeBalanceExitable(address,(uint256[2],address[2]))": "infinite",
                "testMakeExitable(address,address,uint256)": "infinite",
                "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "infinite"
              }
            },
            "methodIdentifiers": {
              "defundChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),address[],uint256[])": "4d3fcbda",
              "defundTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes,bytes,bytes)": "072f25fd",
              "depositAlice(address,uint256)": "635ae901",
              "disputeChannel((address,address,address,address[],(uint256[2],address[2])[],uint256[],uint256[],uint256[],uint256,uint256,bytes32),bytes,bytes)": "c60939be",
              "disputeTransfer((address,bytes32,address,address,address,address,(uint256[2],address[2]),uint256,bytes32),bytes32[])": "5fd334d9",
              "exit(address,address,address)": "5bc9d96d",
              "getAlice()": "eeb30fea",
              "getBob()": "241686a0",
              "getChannelDispute()": "f19eb10e",
              "getDefundNonce(address)": "e7283a8d",
              "getExitableAmount(address,address)": "e9852569",
              "getTotalDepositsAlice(address)": "6f33389e",
              "getTotalDepositsBob(address)": "b081e9c8",
              "getTotalTransferred(address)": "cefa5122",
              "getTransferDispute(bytes32)": "3ff0da16",
              "getWithdrawalTransactionRecord((address,address,address,uint256,uint256,address,bytes))": "8c048fc2",
              "lock()": "f83d08ba",
              "setup(address,address)": "2d34ba79",
              "testMakeBalanceExitable(address,(uint256[2],address[2]))": "7b037295",
              "testMakeExitable(address,address,uint256)": "c55e1dac",
              "withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)": "2c889aa1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AliceDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"}],\"name\":\"ChannelDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"ChannelDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"defunder\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedInitialState\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"indexed\":false,\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"TransferDefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"dispute\",\"type\":\"tuple\"}],\"name\":\"TransferDisputed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"defundChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedInitialTransferState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedTransferResolver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responderSignature\",\"type\":\"bytes\"}],\"name\":\"defundTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositAlice\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assetIds\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsA\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"processedDepositsB\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defundNonces\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreChannelState\",\"name\":\"ccs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"disputeChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"transferDefinition\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"responder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"transferTimeout\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"initialStateHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ICMCAdjudicator.CoreTransferState\",\"name\":\"cts\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProofData\",\"type\":\"bytes32[]\"}],\"name\":\"disputeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"exit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBob\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChannelDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"consensusExpiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defundExpiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ICMCAdjudicator.ChannelDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getDefundNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getExitableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsAlice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalDepositsBob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"}],\"name\":\"getTotalTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"getTransferDispute\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transferStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"transferDisputeExpiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isDefunded\",\"type\":\"bool\"}],\"internalType\":\"struct ICMCAdjudicator.TransferDispute\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"}],\"name\":\"getWithdrawalTransactionRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bob\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"balance\",\"type\":\"tuple\"}],\"name\":\"testMakeBalanceExitable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"}],\"name\":\"testMakeExitable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"channelAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct WithdrawData\",\"name\":\"wd\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"aliceSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bobSignature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Layne Haber <layne@connext.network>\",\"kind\":\"dev\",\"methods\":{\"getAlice()\":{\"returns\":{\"_0\":\"Bob's signer address\"}},\"getBob()\":{\"returns\":{\"_0\":\"Alice's signer address\"}},\"setup(address,address)\":{\"params\":{\"_alice\":\": Address representing user with function deposit\",\"_bob\":\": Address representing user with multisig deposit\"}},\"withdraw((address,address,address,uint256,uint256,address,bytes),bytes,bytes)\":{\"params\":{\"aliceSignature\":\"Signature of owner a\",\"bobSignature\":\"Signature of owner b\",\"wd\":\"The withdraw data consisting of semantic withdraw information, i.e. assetId, recipient, and amount; information to make an optional call in addition to the actual transfer, i.e. target address for the call and call payload; additional information, i.e. channel address and nonce.\"}}},\"title\":\"TestChannel\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAlice()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"getBob()\":{\"notice\":\"A getter function for the bob of the multisig\"},\"setup(address,address)\":{\"notice\":\"Contract constructor for Proxied copies\"}},\"notice\":\"This contract will help test the `ChannelMastercopy` contract and         the associated bits of functionality. This contract should *only*         contain aliases to internal functions that should be unit-tested,         like the `makeExitable` call on `CMCAsset.sol`. Using this         contract will help reduce the amount of boilerplate needed to test         component functionality. For example, `CMCAsset.sol` is only         able to be tested via the adjudicator in many practical cases.         Creating a helper function allows for easier testing of only         that functionality.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/TestChannel.sol\":\"TestChannel\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"},\"@openzeppelin/contracts/cryptography/MerkleProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev These functions deal with verification of Merkle trees (hash trees),\\n */\\nlibrary MerkleProof {\\n    /**\\n     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\\n     * defined by `root`. For this, a `proof` must be provided, containing\\n     * sibling hashes on the branch from the leaf to the root of the tree. Each\\n     * pair of leaves and each pair of pre-images are assumed to be sorted.\\n     */\\n    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {\\n        bytes32 computedHash = leaf;\\n\\n        for (uint256 i = 0; i < proof.length; i++) {\\n            bytes32 proofElement = proof[i];\\n\\n            if (computedHash <= proofElement) {\\n                // Hash(current computed hash + current element of the proof)\\n                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n            } else {\\n                // Hash(current element of the proof + current computed hash)\\n                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n            }\\n        }\\n\\n        // Check if the computed hash (root) is equal to the provided root\\n        return computedHash == root;\\n    }\\n}\\n\",\"keccak256\":\"0x4959be2683e7af3439cb94f06aa6c40cb42ca9336747d0c7dce54f07196489bc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow, so we distribute\\n        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);\\n    }\\n}\\n\",\"keccak256\":\"0xa4fdec0ea7d943692cac780111ff2ff9d89848cad0494a59cfaed63a705054b4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/CMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/Commitment.sol\\\";\\nimport \\\"./interfaces/ICMCAdjudicator.sol\\\";\\nimport \\\"./interfaces/ITransferDefinition.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./CMCDeposit.sol\\\";\\nimport \\\"./lib/LibChannelCrypto.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/cryptography/MerkleProof.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\n/// @title CMCAdjudicator\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic for disputing a single channel and all active\\n///         transfers associated with the channel. Contains two major phases:\\n///         (1) consensus: settle on latest channel state\\n///         (2) defund: remove assets and dispute active transfers\\ncontract CMCAdjudicator is CMCCore, CMCAsset, CMCDeposit, ICMCAdjudicator {\\n    using LibChannelCrypto for bytes32;\\n    using LibMath for uint256;\\n    using SafeMath for uint256;\\n\\n    uint256 private constant INITIAL_DEFUND_NONCE = 1;\\n\\n    ChannelDispute private channelDispute;\\n    mapping(address => uint256) private defundNonces;\\n    mapping(bytes32 => TransferDispute) private transferDisputes;\\n\\n    modifier validateChannel(CoreChannelState calldata ccs) {\\n        require(\\n            ccs.channelAddress == address(this) &&\\n                ccs.alice == alice &&\\n                ccs.bob == bob,\\n            \\\"CMCAdjudicator: INVALID_CHANNEL\\\"\\n        );\\n        _;\\n    }\\n\\n    modifier validateTransfer(CoreTransferState calldata cts) {\\n        require(\\n            cts.channelAddress == address(this),\\n            \\\"CMCAdjudicator: INVALID_TRANSFER\\\"\\n        );\\n        _;\\n    }\\n\\n    function getChannelDispute()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (ChannelDispute memory)\\n    {\\n        return channelDispute;\\n    }\\n\\n    function getDefundNonce(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return defundNonces[assetId];\\n    }\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (TransferDispute memory)\\n    {\\n        return transferDisputes[transferId];\\n    }\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\\n        // Generate hash\\n        bytes32 ccsHash = hashChannelState(ccs);\\n\\n        // Verify Alice's and Bob's signature on the channel state\\n        verifySignaturesOnChannelStateHash(ccs, ccsHash, aliceSignature, bobSignature);\\n\\n        // We cannot dispute a channel in its defund phase\\n        require(!inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // New nonce must be strictly greater than the stored one\\n        require(\\n            channelDispute.nonce < ccs.nonce,\\n            \\\"CMCAdjudicator: INVALID_NONCE\\\"\\n        );\\n\\n        if (!inConsensusPhase()) {\\n            // We are not already in a dispute\\n            // Set expiries\\n            // TODO: offchain-ensure that there can't be an overflow\\n            channelDispute.consensusExpiry = block.timestamp.add(ccs.timeout);\\n            channelDispute.defundExpiry = block.timestamp.add(\\n                ccs.timeout.mul(2)\\n            );\\n        }\\n\\n        // Store newer state\\n        channelDispute.channelStateHash = ccsHash;\\n        channelDispute.nonce = ccs.nonce;\\n        channelDispute.merkleRoot = ccs.merkleRoot;\\n\\n        // Emit event\\n        emit ChannelDisputed(msg.sender, ccs, channelDispute);\\n    }\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external override onlyViaProxy nonReentrant validateChannel(ccs) {\\n        // These checks are not strictly necessary, but it's a bit cleaner this way\\n        require(assetIds.length > 0, \\\"CMCAdjudicator: NO_ASSETS_GIVEN\\\");\\n        require(\\n            indices.length <= assetIds.length,\\n            \\\"CMCAdjudicator: WRONG_ARRAY_LENGTHS\\\"\\n        );\\n\\n        // Verify that the given channel state matches the stored one\\n        require(\\n            hashChannelState(ccs) == channelDispute.channelStateHash,\\n            \\\"CMCAdjudicator: INVALID_CHANNEL_HASH\\\"\\n        );\\n\\n        // We need to be in defund phase for that\\n        require(inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // TODO SECURITY: Beware of reentrancy\\n        // TODO: offchain-ensure that all arrays have the same length:\\n        // assetIds, balances, processedDepositsA, processedDepositsB, defundNonces\\n        // Make sure there are no duplicates in the assetIds -- duplicates are often a source of double-spends\\n\\n        // Defund all assets given\\n        for (uint256 i = 0; i < assetIds.length; i++) {\\n            address assetId = assetIds[i];\\n\\n            // Verify or find the index of the assetId in the ccs.assetIds\\n            uint256 index;\\n            if (i < indices.length) {\\n                // The index was supposedly given -- we verify\\n                index = indices[i];\\n                require(\\n                    assetId == ccs.assetIds[index],\\n                    \\\"CMCAdjudicator: INDEX_MISMATCH\\\"\\n                );\\n            } else {\\n                // we search through the assets in ccs\\n                for (index = 0; index < ccs.assetIds.length; index++) {\\n                    if (assetId == ccs.assetIds[index]) {\\n                        break;\\n                    }\\n                }\\n            }\\n\\n            // Now, if `index`  is equal to the number of assets in ccs,\\n            // then the current asset is not in ccs;\\n            // otherwise, `index` is the index in ccs for the current asset\\n\\n            // Check the assets haven't already been defunded + update the\\n            // defundNonce for that asset\\n            {\\n                // Open a new block to avoid \\\"stack too deep\\\" error\\n                uint256 defundNonce =\\n                    (index == ccs.assetIds.length)\\n                        ? INITIAL_DEFUND_NONCE\\n                        : ccs.defundNonces[index];\\n                require(\\n                    defundNonces[assetId] < defundNonce,\\n                    \\\"CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED\\\"\\n                );\\n                defundNonces[assetId] = defundNonce;\\n            }\\n\\n            // Get total deposits\\n            uint256 tdAlice = _getTotalDepositsAlice(assetId);\\n            uint256 tdBob = _getTotalDepositsBob(assetId);\\n\\n            Balance memory balance;\\n\\n            if (index == ccs.assetIds.length) {\\n                // The current asset is not a part of ccs; refund what has been deposited\\n                balance = Balance({\\n                    amount: [tdAlice, tdBob],\\n                    to: [payable(ccs.alice), payable(ccs.bob)]\\n                });\\n            } else {\\n                // Start with the final balances in ccs\\n                balance = ccs.balances[index];\\n                // Add unprocessed deposits\\n                balance.amount[0] = balance.amount[0].satAdd(\\n                    tdAlice - ccs.processedDepositsA[index]\\n                );\\n                balance.amount[1] = balance.amount[1].satAdd(\\n                    tdBob - ccs.processedDepositsB[index]\\n                );\\n            }\\n\\n            // Add result to exitable amounts\\n            makeBalanceExitable(assetId, balance);\\n        }\\n\\n        emit ChannelDefunded(\\n            msg.sender,\\n            ccs,\\n            channelDispute,\\n            assetIds\\n        );\\n    }\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\\n        // Verify that the given transfer state is included in the \\\"finalized\\\" channel state\\n        bytes32 transferStateHash = hashTransferState(cts);\\n        verifyMerkleProof(\\n            merkleProofData,\\n            channelDispute.merkleRoot,\\n            transferStateHash\\n        );\\n\\n        // The channel needs to be in defund phase for that, i.e. channel state is \\\"finalized\\\"\\n        require(inDefundPhase(), \\\"CMCAdjudicator: INVALID_PHASE\\\");\\n\\n        // Get stored dispute for this transfer\\n        TransferDispute storage transferDispute =\\n            transferDisputes[cts.transferId];\\n\\n        // Verify that this transfer has not been disputed before\\n        require(\\n            transferDispute.transferDisputeExpiry == 0,\\n            \\\"CMCAdjudicator: TRANSFER_ALREADY_DISPUTED\\\"\\n        );\\n\\n        // Store transfer state and set expiry\\n        transferDispute.transferStateHash = transferStateHash;\\n        // TODO: offchain-ensure that there can't be an overflow\\n        transferDispute.transferDisputeExpiry = block.timestamp.add(\\n            cts.transferTimeout\\n        );\\n\\n        emit TransferDisputed(\\n            msg.sender,\\n            cts,\\n            transferDispute\\n        );\\n    }\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external override onlyViaProxy nonReentrant validateTransfer(cts) {\\n        // Get stored dispute for this transfer\\n        TransferDispute storage transferDispute =\\n            transferDisputes[cts.transferId];\\n\\n        // Verify that a dispute for this transfer has already been started\\n        require(\\n            transferDispute.transferDisputeExpiry != 0,\\n            \\\"CMCAdjudicator: TRANSFER_NOT_DISPUTED\\\"\\n        );\\n\\n        // Verify that the given transfer state matches the stored one\\n        require(\\n            hashTransferState(cts) == transferDispute.transferStateHash,\\n            \\\"CMCAdjudicator: INVALID_TRANSFER_HASH\\\"\\n        );\\n\\n        // We can't defund twice\\n        require(\\n            !transferDispute.isDefunded,\\n            \\\"CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED\\\"\\n        );\\n        transferDispute.isDefunded = true;\\n\\n        Balance memory balance;\\n\\n        if (block.timestamp < transferDispute.transferDisputeExpiry) {\\n            // Ensure the correct hash is provided\\n            require(\\n                keccak256(encodedInitialTransferState) == cts.initialStateHash,\\n                \\\"CMCAdjudicator: INVALID_TRANSFER_HASH\\\"\\n            );\\n            \\n            // Before dispute expiry, responder or responder-authorized\\n            // agent (i.e. watchtower) can resolve\\n            require(\\n                msg.sender == cts.responder || cts.initialStateHash.checkSignature(responderSignature, cts.responder),\\n                \\\"CMCAdjudicator: INVALID_RESOLVER\\\"\\n            );\\n            \\n            ITransferDefinition transferDefinition =\\n                ITransferDefinition(cts.transferDefinition);\\n            balance = transferDefinition.resolve(\\n                abi.encode(cts.balance),\\n                encodedInitialTransferState,\\n                encodedTransferResolver\\n            );\\n            // Verify that returned balances don't exceed initial balances\\n            require(\\n                balance.amount[0].add(balance.amount[1]) <=\\n                    cts.balance.amount[0].add(cts.balance.amount[1]),\\n                \\\"CMCAdjudicator: INVALID_BALANCES\\\"\\n            );\\n        } else {\\n            // After dispute expiry, if the responder hasn't resolved, we defund the initial balance\\n            balance = cts.balance;\\n        }\\n\\n        // Depending on previous code path, defund either resolved or initial balance\\n        makeBalanceExitable(cts.assetId, balance);\\n\\n        // Emit event\\n        emit TransferDefunded(\\n            msg.sender,\\n            cts,\\n            transferDispute,\\n            encodedInitialTransferState,\\n            encodedTransferResolver,\\n            balance\\n        );\\n    }\\n\\n    function verifySignaturesOnChannelStateHash(\\n        CoreChannelState calldata ccs,\\n        bytes32 ccsHash,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) internal pure {\\n        bytes32 commitment =\\n            keccak256(abi.encode(CommitmentType.ChannelState, ccsHash));\\n        require(\\n            commitment.checkSignature(aliceSignature, ccs.alice),\\n            \\\"CMCAdjudicator: INVALID_ALICE_SIG\\\"\\n        );\\n        require(\\n            commitment.checkSignature(bobSignature, ccs.bob),\\n            \\\"CMCAdjudicator: INVALID_BOB_SIG\\\"\\n        );\\n    }\\n\\n    function verifyMerkleProof(\\n        bytes32[] calldata proof,\\n        bytes32 root,\\n        bytes32 leaf\\n    ) internal pure {\\n        require(\\n            MerkleProof.verify(proof, root, leaf),\\n            \\\"CMCAdjudicator: INVALID_MERKLE_PROOF\\\"\\n        );\\n    }\\n\\n    function inConsensusPhase() internal view returns (bool) {\\n        return block.timestamp < channelDispute.consensusExpiry;\\n    }\\n\\n    function inDefundPhase() internal view returns (bool) {\\n        return\\n            channelDispute.consensusExpiry <= block.timestamp &&\\n            block.timestamp < channelDispute.defundExpiry;\\n    }\\n\\n    function hashChannelState(CoreChannelState calldata ccs)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(ccs));\\n    }\\n\\n    function hashTransferState(CoreTransferState calldata cts)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(cts));\\n    }\\n}\\n\",\"keccak256\":\"0x351fb7770cbb6fbb6f3470e63d5a9e93c817722f9c8e2e5c62e38ebf8c6e389b\",\"license\":\"UNLICENSED\"},\"src.sol/CMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCAsset.sol\\\";\\nimport \\\"./interfaces/Types.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/Math.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title CMCAsset\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic to safely transfer channel assets (even if they are\\n///         noncompliant). During adjudication, balances from defunding the\\n///         channel or defunding transfers are registered as withdrawable. Once\\n///         they are registered, the owner (or a watchtower on behalf of the\\n///         owner), may call `exit` to reclaim funds from the multisig.\\n\\ncontract CMCAsset is CMCCore, ICMCAsset {\\n    using SafeMath for uint256;\\n    using LibMath for uint256;\\n\\n    mapping(address => uint256) internal totalTransferred;\\n    mapping(address => mapping(address => uint256))\\n        private exitableAmount;\\n\\n    function registerTransfer(address assetId, uint256 amount) internal {\\n        totalTransferred[assetId] += amount;\\n    }\\n\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return totalTransferred[assetId];\\n    }\\n\\n    function makeExitable(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal {\\n        exitableAmount[assetId][\\n            recipient\\n        ] = exitableAmount[assetId][recipient].satAdd(amount);\\n    }\\n\\n    function makeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) internal {\\n        for (uint256 i = 0; i < 2; i++) {\\n            uint256 amount = balance.amount[i];\\n            if (amount > 0) {\\n                makeExitable(assetId, balance.to[i], amount);\\n            }\\n        }\\n    }\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return exitableAmount[assetId][owner];\\n    }\\n\\n    function getAvailableAmount(address assetId, uint256 maxAmount)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        // Taking the min protects against the case where the multisig\\n        // holds less than the amount that is trying to be withdrawn\\n        // while still allowing the total of the funds to be removed\\n        // without the transaction reverting.\\n        return Math.min(maxAmount, LibAsset.getOwnBalance(assetId));\\n    }\\n\\n    function transferAsset(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal {\\n        registerTransfer(assetId, amount);\\n        require(\\n            LibAsset.unregisteredTransfer(assetId, recipient, amount),\\n            \\\"CMCAsset: TRANSFER_FAILED\\\"\\n        );\\n    }\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external override onlyViaProxy nonReentrant {\\n        // Either the owner must be the recipient, or in control\\n        // of setting the recipient of the funds to whomever they\\n        // choose\\n        require(\\n            msg.sender == owner || owner == recipient,\\n            \\\"CMCAsset: OWNER_MISMATCH\\\"\\n        );\\n\\n        uint256 amount =\\n            getAvailableAmount(\\n                assetId,\\n                exitableAmount[assetId][owner]\\n            );\\n\\n        // Revert if amount is 0\\n        require(amount > 0, \\\"CMCAsset: NO_OP\\\");\\n\\n        // Reduce the amount claimable from the multisig by the owner\\n        exitableAmount[assetId][\\n            owner\\n        ] = exitableAmount[assetId][owner].sub(amount);\\n\\n        // Perform transfer\\n        transferAsset(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x39c1bd81d8ec2a0fa7c23aad683017f5e2ec28a2db43643020649f935b5b74bf\",\"license\":\"UNLICENSED\"},\"src.sol/CMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCCore.sol\\\";\\nimport \\\"./ReentrancyGuard.sol\\\";\\n\\n/// @title CMCCore\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic pertaining to the participants of a channel,\\n///         including setting and retrieving the participants and the\\n///         mastercopy.\\n\\ncontract CMCCore is ReentrancyGuard, ICMCCore {\\n    address private immutable mastercopyAddress;\\n\\n    address internal alice;\\n    address internal bob;\\n\\n    /// @notice Set invalid participants to block the mastercopy from being used directly\\n    ///         Nonzero address also prevents the mastercopy from being setup\\n    ///         Only setting alice is sufficient, setting bob too wouldn't change anything\\n    constructor() {\\n        mastercopyAddress = address(this);\\n    }\\n\\n    // Prevents us from calling methods directly from the mastercopy contract\\n    modifier onlyViaProxy {\\n        require(\\n            address(this) != mastercopyAddress,\\n            \\\"Mastercopy: ONLY_VIA_PROXY\\\"\\n        );\\n        _;\\n    }\\n\\n    /// @notice Contract constructor for Proxied copies\\n    /// @param _alice: Address representing user with function deposit\\n    /// @param _bob: Address representing user with multisig deposit\\n    function setup(address _alice, address _bob)\\n        external\\n        override\\n        onlyViaProxy\\n    {\\n        require(alice == address(0), \\\"CMCCore: ALREADY_SETUP\\\");\\n        require(\\n            _alice != address(0) && _bob != address(0),\\n            \\\"CMCCore: INVALID_PARTICIPANT\\\"\\n        );\\n        require(_alice != _bob, \\\"CMCCore: IDENTICAL_PARTICIPANTS\\\");\\n        ReentrancyGuard.setup();\\n        alice = _alice;\\n        bob = _bob;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Bob's signer address\\n    function getAlice()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return alice;\\n    }\\n\\n    /// @notice A getter function for the bob of the multisig\\n    /// @return Alice's signer address\\n    function getBob()\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (address)\\n    {\\n        return bob;\\n    }\\n}\\n\",\"keccak256\":\"0x37324d80a19f1feb6e413fe6a41d82b5dba38bca62e0e05ae6f420000dd93c53\",\"license\":\"UNLICENSED\"},\"src.sol/CMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ICMCDeposit.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibERC20.sol\\\";\\n\\n/// @title CMCDeposit\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic supporting channel multisig deposits. Channel\\n///         funding is asymmetric, with `alice` having to call a deposit\\n///         function which tracks the total amount she has deposited so far,\\n///         and any other funds in the multisig being attributed to `bob`.\\n\\ncontract CMCDeposit is CMCCore, CMCAsset, ICMCDeposit {\\n    mapping(address => uint256) private depositsAlice;\\n\\n    receive() external payable onlyViaProxy nonReentrant {}\\n\\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsAlice(assetId);\\n    }\\n\\n    function _getTotalDepositsAlice(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return depositsAlice[assetId];\\n    }\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (uint256)\\n    {\\n        return _getTotalDepositsBob(assetId);\\n    }\\n\\n    // Calculated using invariant onchain properties. Note we DONT use safemath here\\n    function _getTotalDepositsBob(address assetId)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return\\n            LibAsset.getOwnBalance(assetId) +\\n            totalTransferred[assetId] -\\n            depositsAlice[assetId];\\n    }\\n\\n    function depositAlice(address assetId, uint256 amount)\\n        external\\n        payable\\n        override\\n        onlyViaProxy\\n        nonReentrant\\n    {\\n        if (LibAsset.isEther(assetId)) {\\n            require(msg.value == amount, \\\"CMCDeposit: VALUE_MISMATCH\\\");\\n        } else {\\n            // If ETH is sent along, it will be attributed to bob\\n            require(msg.value == 0, \\\"CMCDeposit: ETH_WITH_ERC_TRANSFER\\\");\\n            require(\\n                LibERC20.transferFrom(\\n                    assetId,\\n                    msg.sender,\\n                    address(this),\\n                    amount\\n                ),\\n                \\\"CMCDeposit: ERC20_TRANSFER_FAILED\\\"\\n            );\\n        }\\n        // NOTE: explicitly do NOT use safemath here\\n        depositsAlice[assetId] += amount;\\n        emit AliceDeposited(assetId, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x4d3dd828158289df93d6b5a6419bc5e8d95888aba81e62cd913af1e4c540bece\",\"license\":\"UNLICENSED\"},\"src.sol/CMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/Commitment.sol\\\";\\nimport \\\"./interfaces/ICMCWithdraw.sol\\\";\\nimport \\\"./interfaces/WithdrawHelper.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibChannelCrypto.sol\\\";\\nimport \\\"./lib/LibUtils.sol\\\";\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice Contains logic for all cooperative channel multisig withdrawals.\\n///         Cooperative withdrawal commitments must be signed by both channel\\n///         participants. As part of the channel withdrawals, an arbitrary\\n///         call can be made, which is extracted from the withdraw data.\\n\\ncontract CMCWithdraw is CMCCore, CMCAsset, ICMCWithdraw {\\n    using LibChannelCrypto for bytes32;\\n\\n    mapping(bytes32 => bool) private isExecuted;\\n\\n    modifier validateWithdrawData(WithdrawData calldata wd) {\\n        require(\\n            wd.channelAddress == address(this),\\n            \\\"CMCWithdraw: CHANNEL_MISMATCH\\\"\\n        );\\n        _;\\n    }\\n\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        override\\n        onlyViaProxy\\n        nonReentrantView\\n        returns (bool)\\n    {\\n        return isExecuted[hashWithdrawData(wd)];\\n    }\\n\\n    /// @param wd The withdraw data consisting of\\n    /// semantic withdraw information, i.e. assetId, recipient, and amount;\\n    /// information to make an optional call in addition to the actual transfer,\\n    /// i.e. target address for the call and call payload;\\n    /// additional information, i.e. channel address and nonce.\\n    /// @param aliceSignature Signature of owner a\\n    /// @param bobSignature Signature of owner b\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external override onlyViaProxy nonReentrant validateWithdrawData(wd) {\\n        // Generate hash\\n        bytes32 wdHash = hashWithdrawData(wd);\\n\\n        // Verify Alice's and Bob's signature on the withdraw data\\n        verifySignaturesOnWithdrawDataHash(wdHash, aliceSignature, bobSignature);\\n\\n        // Replay protection\\n        require(!isExecuted[wdHash], \\\"CMCWithdraw: ALREADY_EXECUTED\\\");\\n        isExecuted[wdHash] = true;\\n\\n        // Determine actually transferable amount\\n        uint256 actualAmount = getAvailableAmount(wd.assetId, wd.amount);\\n\\n        // Revert if actualAmount is zero && callTo is 0\\n        require(\\n            actualAmount > 0 || wd.callTo != address(0),\\n            \\\"CMCWithdraw: NO_OP\\\"\\n        );\\n\\n        // Register and execute the transfer\\n        transferAsset(wd.assetId, wd.recipient, actualAmount);\\n\\n        // Do we have to make a call in addition to the actual transfer?\\n        if (wd.callTo != address(0)) {\\n            WithdrawHelper(wd.callTo).execute(wd, actualAmount);\\n        }\\n    }\\n\\n    function verifySignaturesOnWithdrawDataHash(\\n        bytes32 wdHash,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) internal view {\\n        bytes32 commitment =\\n            keccak256(abi.encode(CommitmentType.WithdrawData, wdHash));\\n        require(\\n            commitment.checkSignature(aliceSignature, alice),\\n            \\\"CMCWithdraw: INVALID_ALICE_SIG\\\"\\n        );\\n        require(\\n            commitment.checkSignature(bobSignature, bob),\\n            \\\"CMCWithdraw: INVALID_BOB_SIG\\\"\\n        );\\n    }\\n\\n    function hashWithdrawData(WithdrawData calldata wd)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encode(wd));\\n    }\\n}\\n\",\"keccak256\":\"0x7fde93a55cab8b4a9497471af1f8321a6d9463a93c3c6b11cf6d5ada26326beb\",\"license\":\"UNLICENSED\"},\"src.sol/ChannelMastercopy.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/IVectorChannel.sol\\\";\\nimport \\\"./CMCCore.sol\\\";\\nimport \\\"./CMCAsset.sol\\\";\\nimport \\\"./CMCDeposit.sol\\\";\\nimport \\\"./CMCWithdraw.sol\\\";\\nimport \\\"./CMCAdjudicator.sol\\\";\\n\\n/// @title ChannelMastercopy\\n/// @author Connext <support@connext.network>\\n/// @notice Contains the logic used by all Vector multisigs. A proxy to this\\n///         contract is deployed per-channel using the ChannelFactory.sol.\\n///         Supports channel adjudication logic, deposit logic, and arbitrary\\n///         calls when a commitment is double-signed.\\ncontract ChannelMastercopy is\\n    CMCCore,\\n    CMCAsset,\\n    CMCDeposit,\\n    CMCWithdraw,\\n    CMCAdjudicator,\\n    IVectorChannel\\n{\\n\\n}\\n\",\"keccak256\":\"0x96d68c908eb39a0002b574c423306ef1b9991da56087cb8f5e2d8b908676b3c7\",\"license\":\"UNLICENSED\"},\"src.sol/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title CMCWithdraw\\n/// @author Connext <support@connext.network>\\n/// @notice A \\\"mutex\\\" reentrancy guard, heavily influenced by OpenZeppelin.\\n\\ncontract ReentrancyGuard {\\n    uint256 private constant OPEN = 1;\\n    uint256 private constant LOCKED = 2;\\n\\n    uint256 public lock;\\n\\n    function setup() internal {\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrant() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        lock = LOCKED;\\n        _;\\n        lock = OPEN;\\n    }\\n\\n    modifier nonReentrantView() {\\n        require(lock == OPEN, \\\"ReentrancyGuard: REENTRANT_CALL\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf7adf3f05703e0176d892051633e6ca3291e5a3d7ab769f880c03a0d0849dfa7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Commitment.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nenum CommitmentType {ChannelState, WithdrawData}\\n\",\"keccak256\":\"0xabfb62d2dbe45e307fc08742f87d2ff5d6faa9ab065f0c2395dc4adcbe0a9c20\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITestChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./IVectorChannel.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITestChannel is IVectorChannel {\\n    function testMakeExitable(\\n        address assetId,\\n        address payable recipient,\\n        uint256 maxAmount\\n    ) external;\\n\\n    function testMakeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) external;\\n}\\n\",\"keccak256\":\"0xc33ba932ee6d2e0c16b808cec6d1e88b805cbc62119b28755bb22881e64efbaa\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/WithdrawHelper.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCWithdraw.sol\\\";\\n\\ninterface WithdrawHelper {\\n    function execute(WithdrawData calldata wd, uint256 actualAmount) external;\\n}\\n\",\"keccak256\":\"0x45bd70363bc7a45001589d55d8d068a3baa321c50382c0c73f1ffae45adfc4bb\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibChannelCrypto.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/cryptography/ECDSA.sol\\\";\\n\\t\\t\\n/// @author Connext <support@connext.network>\\t\\t\\n/// @notice This library contains helpers for recovering signatures from a\\t\\t\\n///         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t\\n///         messages to prevent misuse of private keys by injected providers,\\t\\t\\n///         and instead only sign messages with a Vector channel prefix.\\nlibrary LibChannelCrypto {\\n    function checkSignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toChannelSignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toChannelSignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x16Vector Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    function checkUtilitySignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toUtilitySignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toUtilitySignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x17Utility Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xb8aa3679b75f2a1a5785f614f5dff9a76a689c18caa56a8df1f4e3c3167d6ece\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibMath\\n/// @author Connext <support@connext.network>\\n/// @notice This library allows functions that would otherwise overflow and\\n///         revert if SafeMath was used to instead return the UINT_MAX. In the\\n///         adjudicator, this is used to ensure you can get the majority of\\n///         funds out in the event your balance > UINT_MAX and there is an\\n///         onchain dispute.\\nlibrary LibMath {\\n    /// @dev Returns the maximum uint256 for an addition that would overflow\\n    ///      (saturation arithmetic)\\n    function satAdd(uint256 x, uint256 y) internal pure returns (uint256) {\\n        uint256 sum = x + y;\\n        return sum >= x ? sum : type(uint256).max;\\n    }\\n}\\n\",\"keccak256\":\"0x1e6307538bfdb12a0f5234db5b9b22365b6abe2b96baa37f2e4b5d2d3f6683b8\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"},\"src.sol/testing/TestChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nimport \\\"../ChannelMastercopy.sol\\\";\\nimport \\\"../interfaces/ITestChannel.sol\\\";\\n\\n/// @title TestChannel\\n/// @author Layne Haber <layne@connext.network>\\n/// @notice This contract will help test the `ChannelMastercopy` contract and\\n///         the associated bits of functionality. This contract should *only*\\n///         contain aliases to internal functions that should be unit-tested,\\n///         like the `makeExitable` call on `CMCAsset.sol`. Using this\\n///         contract will help reduce the amount of boilerplate needed to test\\n///         component functionality. For example, `CMCAsset.sol` is only\\n///         able to be tested via the adjudicator in many practical cases.\\n///         Creating a helper function allows for easier testing of only\\n///         that functionality.\\n\\ncontract TestChannel is ChannelMastercopy, ITestChannel {\\n    function testMakeExitable(\\n        address assetId,\\n        address payable recipient,\\n        uint256 maxAmount\\n    ) public override {\\n        makeExitable(assetId, recipient, maxAmount);\\n    }\\n\\n    function testMakeBalanceExitable(\\n        address assetId,\\n        Balance memory balance\\n    ) public override {\\n        makeBalanceExitable(assetId, balance);\\n    }\\n}\\n\",\"keccak256\":\"0x20e6faa19fa688dbfe530ce326cead6ef90127968f68a28156ba0a2a2259589c\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3403,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "lock",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 2597,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "alice",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2599,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "bob",
                "offset": 0,
                "slot": "2",
                "type": "t_address"
              },
              {
                "astId": 2348,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "totalTransferred",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2354,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "exitableAmount",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 2732,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "depositsAlice",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 2895,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "isExecuted",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_bytes32,t_bool)"
              },
              {
                "astId": 1503,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "channelDispute",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(ChannelDispute)3596_storage"
              },
              {
                "astId": 1507,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "defundNonces",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 1511,
                "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                "label": "transferDisputes",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_bytes32,t_struct(TransferDispute)3603_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_bool)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_bytes32,t_struct(TransferDispute)3603_storage)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute)",
                "numberOfBytes": "32",
                "value": "t_struct(TransferDispute)3603_storage"
              },
              "t_struct(ChannelDispute)3596_storage": {
                "encoding": "inplace",
                "label": "struct ICMCAdjudicator.ChannelDispute",
                "members": [
                  {
                    "astId": 3587,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "channelStateHash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3589,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "nonce",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3591,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "merkleRoot",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3593,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "consensusExpiry",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3595,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "defundExpiry",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "160"
              },
              "t_struct(TransferDispute)3603_storage": {
                "encoding": "inplace",
                "label": "struct ICMCAdjudicator.TransferDispute",
                "members": [
                  {
                    "astId": 3598,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "transferStateHash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 3600,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "transferDisputeExpiry",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  },
                  {
                    "astId": 3602,
                    "contract": "src.sol/testing/TestChannel.sol:TestChannel",
                    "label": "isDefunded",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_bool"
                  }
                ],
                "numberOfBytes": "96"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "getAlice()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "getBob()": {
                "notice": "A getter function for the bob of the multisig"
              },
              "setup(address,address)": {
                "notice": "Contract constructor for Proxied copies"
              }
            },
            "notice": "This contract will help test the `ChannelMastercopy` contract and         the associated bits of functionality. This contract should *only*         contain aliases to internal functions that should be unit-tested,         like the `makeExitable` call on `CMCAsset.sol`. Using this         contract will help reduce the amount of boilerplate needed to test         component functionality. For example, `CMCAsset.sol` is only         able to be tested via the adjudicator in many practical cases.         Creating a helper function allows for easier testing of only         that functionality.",
            "version": 1
          }
        }
      },
      "src.sol/testing/TestChannelFactory.sol": {
        "TestChannelFactory": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_mastercopy",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_chainId",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "name": "ChannelCreation",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "createChannel",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "assetId",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "createChannelAndDepositAlice",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "createChannelWithoutSetup",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "channel",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "deployChannelProxyWithoutSetup",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getChainId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_chainId",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "alice",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "bob",
                  "type": "address"
                }
              ],
              "name": "getChannelAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getMastercopy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getProxyCreationCode",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getStoredChainId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Layne Haber <layne@connext.network>",
            "kind": "dev",
            "methods": {
              "createChannel(address,address)": {
                "details": "Allows us to create new channel contract and get it all set up in one transaction",
                "params": {
                  "alice": "address of the high fidelity channel participant",
                  "bob": "address of the other channel participant"
                }
              },
              "createChannelAndDepositAlice(address,address,address,uint256)": {
                "details": "Allows us to create a new channel contract and fund it in one transaction",
                "params": {
                  "bob": "address of the other channel participant"
                }
              },
              "getChainId()": {
                "details": "Allows us to get the chainId that this factory will use in the create2 salt"
              },
              "getChannelAddress(address,address)": {
                "details": "Allows us to get the address for a new channel contract created via `createChannel`",
                "params": {
                  "alice": "address of the igh fidelity channel participant",
                  "bob": "address of the other channel participant"
                }
              },
              "getMastercopy()": {
                "details": "Allows us to get the mastercopy that this factory will deploy channels against"
              },
              "getProxyCreationCode()": {
                "details": "Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`"
              },
              "getStoredChainId()": {
                "details": "Allows us to get the chainId that this factory has stored"
              }
            },
            "title": "TestChannelFactory",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60c060405234801561001057600080fd5b50604051610d2f380380610d2f83398101604081905261002f916100ef565b6001600160601b0319606083901b1660805260a0819052818161005182610066565b80516020909101206000555061019492505050565b60606040518060400160405280601481526020017f3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000815250826040518060400160405280600f81526020016e5af43d82803e903d91602b57fd5bf360881b8152506040516020016100d993929190610160565b6040516020818303038152906040529050919050565b60008060408385031215610101578182fd5b82516001600160a01b0381168114610117578283fd5b6020939093015192949293505050565b60008151815b81811015610147576020818501810151868301520161012d565b818111156101555782828601525b509290920192915050565b600061016c8286610127565b606085901b6001600160601b031916815261018a6014820185610127565b9695505050505050565b60805160601c60a051610b6b6101c4600039806101d452806101fa5250806101a952806103495250610b6b6000f3fe6080604052600436106100865760003560e01c80635b056cb5116100595780635b056cb51461011a578063a25dbcc91461013a578063e617aaac1461015a578063efe436931461017a578063fe4545011461018f57610086565b806315727e911461008b57806332a130c9146100b65780633408e470146100d857806335a1ba6f146100ed575b600080fd5b34801561009757600080fd5b506100a06101a2565b6040516100ad9190610972565b60405180910390f35b3480156100c257600080fd5b506100cb6101d2565b6040516100ad9190610afc565b3480156100e457600080fd5b506100cb6101f6565b3480156100f957600080fd5b5061010d6101083660046107a6565b61022e565b6040516100ad9190610907565b34801561012657600080fd5b5061010d6101353660046107a6565b6102da565b34801561014657600080fd5b5061010d6101553660046107a6565b61031d565b34801561016657600080fd5b5061010d6101753660046107a6565b610330565b34801561018657600080fd5b5061010d610347565b61010d61019d3660046107da565b61036b565b60606101cd7f0000000000000000000000000000000000000000000000000000000000000000610448565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000806102265746915061022a565b8091505b5090565b600061023a83836104c8565b604051632d34ba7960e01b81529091506001600160a01b03821690632d34ba799061026b908690869060040161091b565b600060405180830381600087803b15801561028557600080fd5b505af1158015610299573d6000803e3d6000fd5b505050507fa79ba8cc5fdc29196c8d65701a02433c92328f38f0ffbea3908335b80d81409d816040516102cc9190610907565b60405180910390a192915050565b60006102e683836104c8565b90507fa79ba8cc5fdc29196c8d65701a02433c92328f38f0ffbea3908335b80d81409d816040516102cc9190610907565b92915050565b600061032983836104c8565b9392505050565b600061032961033f84846104f2565b60005461052e565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610377858561022e565b90506103828361053b565b6103de5761039283333085610548565b6103b75760405162461bcd60e51b81526004016103ae90610a80565b60405180910390fd5b6103c283828461059b565b6103de5760405162461bcd60e51b81526004016103ae90610a3c565b60405163635ae90160e01b81526001600160a01b0382169063635ae90190349061040e9087908790600401610959565b6000604051808303818588803b15801561042757600080fd5b505af115801561043b573d6000803e3d6000fd5b5050505050949350505050565b6060604051806040016040528060148152602001733d602d80600a3d3981f3363d3d373d3d3d363d7360601b815250826040518060400160405280600f81526020016e5af43d82803e903d91602b57fd5bf360881b8152506040516020016104b2939291906108c0565b6040516020818303038152906040529050919050565b6000806104d584846104f2565b90506104ea6000826104e56101a2565b6105e3565b949350505050565b600082826104fe6101f6565b60405160200161051093929190610847565b60405160208183030381529060405280519060200120905092915050565b6000610329838330610655565b6001600160a01b03161590565b60006105928585858560405160240161056393929190610935565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610694565b95945050505050565b60006104ea8484846040516024016105b4929190610959565b60408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610694565b600080844710156106065760405162461bcd60e51b81526004016103ae90610ac5565b82516106245760405162461bcd60e51b81526004016103ae906109a5565b8383516020850187f590506001600160a01b0381166104ea5760405162461bcd60e51b81526004016103ae906109da565b60008060ff60f81b8386866040516020016106739493929190610870565b60408051808303601f19018152919052805160209091012095945050505050565b600061069f83610745565b6106bb5760405162461bcd60e51b81526004016103ae90610a11565b60006060846001600160a01b0316846040516106d791906108a4565b6000604051808303816000865af19150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b5091509150610728828261077e565b805115806105925750808060200190518101906105929190610827565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906104ea575050151592915050565b8161078b57805160208201fd5b5050565b80356001600160a01b038116811461031757600080fd5b600080604083850312156107b8578182fd5b6107c2848461078f565b91506107d1846020850161078f565b90509250929050565b600080600080608085870312156107ef578182fd5b6107f9868661078f565b9350610808866020870161078f565b9250610817866040870161078f565b9396929550929360600135925050565b600060208284031215610838578081fd5b81518015158114610329578182fd5b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b6001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b600082516108b6818460208701610b05565b9190910192915050565b600084516108d2818460208901610b05565b606085901b6001600160601b03191690830190815283516108fa816014840160208801610b05565b0160140195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610991816040850160208701610b05565b601f01601f19169190910160400192915050565b6020808252818101527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604082015260600190565b60208082526019908201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604082015260600190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b60208082526024908201527f4368616e6e656c466163746f72793a2045524332305f415050524f56455f46416040820152631253115160e21b606082015260800190565b60208082526025908201527f4368616e6e656c466163746f72793a2045524332305f5452414e534645525f46604082015264105253115160da1b606082015260800190565b6020808252601d908201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604082015260600190565b90815260200190565b60005b83811015610b20578181015183820152602001610b08565b83811115610b2f576000848401525b5050505056fea2646970667358221220fa69de65df92b4ccbc7a81a7caa7fcb8650aaa57251807e3e32577e1332d7b9064736f6c63430007010033",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xD2F CODESIZE SUB DUP1 PUSH2 0xD2F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xEF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP4 SWAP1 SHL AND PUSH1 0x80 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE DUP2 DUP2 PUSH2 0x51 DUP3 PUSH2 0x66 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x0 SSTORE POP PUSH2 0x194 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xD9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x160 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x101 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x117 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x147 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD MSTORE ADD PUSH2 0x12D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x155 JUMPI DUP3 DUP3 DUP7 ADD MSTORE JUMPDEST POP SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16C DUP3 DUP7 PUSH2 0x127 JUMP JUMPDEST PUSH1 0x60 DUP6 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP2 MSTORE PUSH2 0x18A PUSH1 0x14 DUP3 ADD DUP6 PUSH2 0x127 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH2 0xB6B PUSH2 0x1C4 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1D4 MSTORE DUP1 PUSH2 0x1FA MSTORE POP DUP1 PUSH2 0x1A9 MSTORE DUP1 PUSH2 0x349 MSTORE POP PUSH2 0xB6B PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x86 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5B056CB5 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x5B056CB5 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0xA25DBCC9 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0xE617AAAC EQ PUSH2 0x15A JUMPI DUP1 PUSH4 0xEFE43693 EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xFE454501 EQ PUSH2 0x18F JUMPI PUSH2 0x86 JUMP JUMPDEST DUP1 PUSH4 0x15727E91 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x32A130C9 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0x35A1BA6F EQ PUSH2 0xED JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x1A2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x972 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0xAFC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x1F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x907 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x135 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x2DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x155 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x330 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x347 JUMP JUMPDEST PUSH2 0x10D PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x36B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1CD PUSH32 0x0 PUSH2 0x448 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 PUSH2 0x226 JUMPI CHAINID SWAP2 POP PUSH2 0x22A JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23A DUP4 DUP4 PUSH2 0x4C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D34BA79 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x2D34BA79 SWAP1 PUSH2 0x26B SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x91B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x299 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xA79BA8CC5FDC29196C8D65701A02433C92328F38F0FFBEA3908335B80D81409D DUP2 PUSH1 0x40 MLOAD PUSH2 0x2CC SWAP2 SWAP1 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E6 DUP4 DUP4 PUSH2 0x4C8 JUMP JUMPDEST SWAP1 POP PUSH32 0xA79BA8CC5FDC29196C8D65701A02433C92328F38F0FFBEA3908335B80D81409D DUP2 PUSH1 0x40 MLOAD PUSH2 0x2CC SWAP2 SWAP1 PUSH2 0x907 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x329 DUP4 DUP4 PUSH2 0x4C8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x329 PUSH2 0x33F DUP5 DUP5 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x52E JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x377 DUP6 DUP6 PUSH2 0x22E JUMP JUMPDEST SWAP1 POP PUSH2 0x382 DUP4 PUSH2 0x53B JUMP JUMPDEST PUSH2 0x3DE JUMPI PUSH2 0x392 DUP4 CALLER ADDRESS DUP6 PUSH2 0x548 JUMP JUMPDEST PUSH2 0x3B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xA80 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C2 DUP4 DUP3 DUP5 PUSH2 0x59B JUMP JUMPDEST PUSH2 0x3DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xA3C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x635AE901 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x635AE901 SWAP1 CALLVALUE SWAP1 PUSH2 0x40E SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x959 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH20 0x3D602D80600A3D3981F3363D3D373D3D3D363D73 PUSH1 0x60 SHL DUP2 MSTORE POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x4B2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x8C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4D5 DUP5 DUP5 PUSH2 0x4F2 JUMP JUMPDEST SWAP1 POP PUSH2 0x4EA PUSH1 0x0 DUP3 PUSH2 0x4E5 PUSH2 0x1A2 JUMP JUMPDEST PUSH2 0x5E3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH2 0x4FE PUSH2 0x1F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x510 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x847 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x329 DUP4 DUP4 ADDRESS PUSH2 0x655 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x592 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x563 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x935 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5B4 SWAP3 SWAP2 SWAP1 PUSH2 0x959 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x694 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SELFBALANCE LT ISZERO PUSH2 0x606 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xAC5 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x624 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0x9A5 JUMP JUMPDEST DUP4 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP8 CREATE2 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xFF PUSH1 0xF8 SHL DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x673 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x870 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP4 PUSH2 0x745 JUMP JUMPDEST PUSH2 0x6BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x6D7 SWAP2 SWAP1 PUSH2 0x8A4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x714 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x719 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x728 DUP3 DUP3 PUSH2 0x77E JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x592 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x592 SWAP2 SWAP1 PUSH2 0x827 JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x4EA JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x78B JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x7C2 DUP5 DUP5 PUSH2 0x78F JUMP JUMPDEST SWAP2 POP PUSH2 0x7D1 DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x78F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x7EF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x7F9 DUP7 DUP7 PUSH2 0x78F JUMP JUMPDEST SWAP4 POP PUSH2 0x808 DUP7 PUSH1 0x20 DUP8 ADD PUSH2 0x78F JUMP JUMPDEST SWAP3 POP PUSH2 0x817 DUP7 PUSH1 0x40 DUP8 ADD PUSH2 0x78F JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x838 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x329 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND DUP3 MSTORE SWAP3 SWAP1 SWAP4 SHL SWAP1 SWAP2 AND PUSH1 0x14 DUP4 ADD MSTORE PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x48 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT SWAP5 SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x60 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 DUP5 ADD MSTORE PUSH1 0x15 DUP4 ADD MSTORE PUSH1 0x35 DUP3 ADD MSTORE PUSH1 0x55 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x8B6 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xB05 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x8D2 DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x60 DUP6 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND SWAP1 DUP4 ADD SWAP1 DUP2 MSTORE DUP4 MLOAD PUSH2 0x8FA DUP2 PUSH1 0x14 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xB05 JUMP JUMPDEST ADD PUSH1 0x14 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x991 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x437265617465323A2062797465636F6465206C656E677468206973207A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A204661696C6564206F6E206465706C6F7900000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F415050524F56455F4641 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x12531151 PUSH1 0xE2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F5452414E534645525F46 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1052531151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB20 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xB08 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL PUSH10 0xDE65DF92B4CCBC7A81A7 0xCA 0xA7 0xFC 0xB8 PUSH6 0xAAA57251807 0xE3 0xE3 0x25 PUSH24 0xE1332D7B9064736F6C634300070100330000000000000000 ",
              "sourceMap": "420:572:42:-:0;;;472:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1207:24:15;;;;;;;1241:18;;;;546:11:42;559:8;1298:34:15;546:11:42;1298:21:15;:34::i;:::-;1288:45;;;;;;;1269:16;:64;-1:-1:-1;420:572:42;;-1:-1:-1;;;420:572:42;4816:252:15;4891:12;4954:23;;;;;;;;;;;;;;;;;4995:11;5024:23;;;;;;;;;;;;;-1:-1:-1;;;5024:23:15;;;4920:141;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4913:148;;4816:252;;;:::o;287:399:-1:-;;;419:2;407:9;398:7;394:23;390:32;387:2;;;-1:-1;;425:12;387:2;83:13;;-1:-1;;;;;2230:54;;3011:35;;3001:2;;-1:-1;;3050:12;3001:2;588;638:22;;;;224:13;477:74;;224:13;;-1:-1;;;381:305::o;852:356::-;;1012:5;1876:12;-1:-1;2448:101;2462:6;2459:1;2456:13;2448:101;;;1156:4;2529:11;;;;;2523:18;2510:11;;;2503:39;2477:10;2448:101;;;2564:6;2561:1;2558:13;2555:2;;;-1:-1;2620:6;2615:3;2611:16;2604:27;2555:2;-1:-1;1187:16;;;;;960:248;-1:-1;;960:248::o;1215:567::-;;1442:93;1531:3;1522:6;1442:93;:::i;:::-;2920:14;;;;-1:-1;;;;;;2920:14;782:58;;1664:93;1643:2;1634:12;;1744:6;1664:93;:::i;:::-;1767:10;1423:359;-1:-1;;;;;;1423:359::o;:::-;420:572:42;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "3102": [
                  {
                    "length": 32,
                    "start": 425
                  },
                  {
                    "length": 32,
                    "start": 841
                  }
                ],
                "3104": [
                  {
                    "length": 32,
                    "start": 468
                  },
                  {
                    "length": 32,
                    "start": 506
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106100865760003560e01c80635b056cb5116100595780635b056cb51461011a578063a25dbcc91461013a578063e617aaac1461015a578063efe436931461017a578063fe4545011461018f57610086565b806315727e911461008b57806332a130c9146100b65780633408e470146100d857806335a1ba6f146100ed575b600080fd5b34801561009757600080fd5b506100a06101a2565b6040516100ad9190610972565b60405180910390f35b3480156100c257600080fd5b506100cb6101d2565b6040516100ad9190610afc565b3480156100e457600080fd5b506100cb6101f6565b3480156100f957600080fd5b5061010d6101083660046107a6565b61022e565b6040516100ad9190610907565b34801561012657600080fd5b5061010d6101353660046107a6565b6102da565b34801561014657600080fd5b5061010d6101553660046107a6565b61031d565b34801561016657600080fd5b5061010d6101753660046107a6565b610330565b34801561018657600080fd5b5061010d610347565b61010d61019d3660046107da565b61036b565b60606101cd7f0000000000000000000000000000000000000000000000000000000000000000610448565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000806102265746915061022a565b8091505b5090565b600061023a83836104c8565b604051632d34ba7960e01b81529091506001600160a01b03821690632d34ba799061026b908690869060040161091b565b600060405180830381600087803b15801561028557600080fd5b505af1158015610299573d6000803e3d6000fd5b505050507fa79ba8cc5fdc29196c8d65701a02433c92328f38f0ffbea3908335b80d81409d816040516102cc9190610907565b60405180910390a192915050565b60006102e683836104c8565b90507fa79ba8cc5fdc29196c8d65701a02433c92328f38f0ffbea3908335b80d81409d816040516102cc9190610907565b92915050565b600061032983836104c8565b9392505050565b600061032961033f84846104f2565b60005461052e565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610377858561022e565b90506103828361053b565b6103de5761039283333085610548565b6103b75760405162461bcd60e51b81526004016103ae90610a80565b60405180910390fd5b6103c283828461059b565b6103de5760405162461bcd60e51b81526004016103ae90610a3c565b60405163635ae90160e01b81526001600160a01b0382169063635ae90190349061040e9087908790600401610959565b6000604051808303818588803b15801561042757600080fd5b505af115801561043b573d6000803e3d6000fd5b5050505050949350505050565b6060604051806040016040528060148152602001733d602d80600a3d3981f3363d3d373d3d3d363d7360601b815250826040518060400160405280600f81526020016e5af43d82803e903d91602b57fd5bf360881b8152506040516020016104b2939291906108c0565b6040516020818303038152906040529050919050565b6000806104d584846104f2565b90506104ea6000826104e56101a2565b6105e3565b949350505050565b600082826104fe6101f6565b60405160200161051093929190610847565b60405160208183030381529060405280519060200120905092915050565b6000610329838330610655565b6001600160a01b03161590565b60006105928585858560405160240161056393929190610935565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610694565b95945050505050565b60006104ea8484846040516024016105b4929190610959565b60408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610694565b600080844710156106065760405162461bcd60e51b81526004016103ae90610ac5565b82516106245760405162461bcd60e51b81526004016103ae906109a5565b8383516020850187f590506001600160a01b0381166104ea5760405162461bcd60e51b81526004016103ae906109da565b60008060ff60f81b8386866040516020016106739493929190610870565b60408051808303601f19018152919052805160209091012095945050505050565b600061069f83610745565b6106bb5760405162461bcd60e51b81526004016103ae90610a11565b60006060846001600160a01b0316846040516106d791906108a4565b6000604051808303816000865af19150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b5091509150610728828261077e565b805115806105925750808060200190518101906105929190610827565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906104ea575050151592915050565b8161078b57805160208201fd5b5050565b80356001600160a01b038116811461031757600080fd5b600080604083850312156107b8578182fd5b6107c2848461078f565b91506107d1846020850161078f565b90509250929050565b600080600080608085870312156107ef578182fd5b6107f9868661078f565b9350610808866020870161078f565b9250610817866040870161078f565b9396929550929360600135925050565b600060208284031215610838578081fd5b81518015158114610329578182fd5b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b6001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b600082516108b6818460208701610b05565b9190910192915050565b600084516108d2818460208901610b05565b606085901b6001600160601b03191690830190815283516108fa816014840160208801610b05565b0160140195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610991816040850160208701610b05565b601f01601f19169190910160400192915050565b6020808252818101527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604082015260600190565b60208082526019908201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604082015260600190565b6020808252601190820152704c696245524332303a204e4f5f434f444560781b604082015260600190565b60208082526024908201527f4368616e6e656c466163746f72793a2045524332305f415050524f56455f46416040820152631253115160e21b606082015260800190565b60208082526025908201527f4368616e6e656c466163746f72793a2045524332305f5452414e534645525f46604082015264105253115160da1b606082015260800190565b6020808252601d908201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604082015260600190565b90815260200190565b60005b83811015610b20578181015183820152602001610b08565b83811115610b2f576000848401525b5050505056fea2646970667358221220fa69de65df92b4ccbc7a81a7caa7fcb8650aaa57251807e3e32577e1332d7b9064736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x86 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5B056CB5 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x5B056CB5 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0xA25DBCC9 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0xE617AAAC EQ PUSH2 0x15A JUMPI DUP1 PUSH4 0xEFE43693 EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xFE454501 EQ PUSH2 0x18F JUMPI PUSH2 0x86 JUMP JUMPDEST DUP1 PUSH4 0x15727E91 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x32A130C9 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0x35A1BA6F EQ PUSH2 0xED JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x1A2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x972 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0xAFC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x1F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x907 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x135 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x2DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x155 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x330 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10D PUSH2 0x347 JUMP JUMPDEST PUSH2 0x10D PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x36B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1CD PUSH32 0x0 PUSH2 0x448 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 PUSH2 0x226 JUMPI CHAINID SWAP2 POP PUSH2 0x22A JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23A DUP4 DUP4 PUSH2 0x4C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D34BA79 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x2D34BA79 SWAP1 PUSH2 0x26B SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x91B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x299 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xA79BA8CC5FDC29196C8D65701A02433C92328F38F0FFBEA3908335B80D81409D DUP2 PUSH1 0x40 MLOAD PUSH2 0x2CC SWAP2 SWAP1 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E6 DUP4 DUP4 PUSH2 0x4C8 JUMP JUMPDEST SWAP1 POP PUSH32 0xA79BA8CC5FDC29196C8D65701A02433C92328F38F0FFBEA3908335B80D81409D DUP2 PUSH1 0x40 MLOAD PUSH2 0x2CC SWAP2 SWAP1 PUSH2 0x907 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x329 DUP4 DUP4 PUSH2 0x4C8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x329 PUSH2 0x33F DUP5 DUP5 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x52E JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x377 DUP6 DUP6 PUSH2 0x22E JUMP JUMPDEST SWAP1 POP PUSH2 0x382 DUP4 PUSH2 0x53B JUMP JUMPDEST PUSH2 0x3DE JUMPI PUSH2 0x392 DUP4 CALLER ADDRESS DUP6 PUSH2 0x548 JUMP JUMPDEST PUSH2 0x3B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xA80 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C2 DUP4 DUP3 DUP5 PUSH2 0x59B JUMP JUMPDEST PUSH2 0x3DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xA3C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x635AE901 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x635AE901 SWAP1 CALLVALUE SWAP1 PUSH2 0x40E SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x959 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH20 0x3D602D80600A3D3981F3363D3D373D3D3D363D73 PUSH1 0x60 SHL DUP2 MSTORE POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x5AF43D82803E903D91602B57FD5BF3 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x4B2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x8C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4D5 DUP5 DUP5 PUSH2 0x4F2 JUMP JUMPDEST SWAP1 POP PUSH2 0x4EA PUSH1 0x0 DUP3 PUSH2 0x4E5 PUSH2 0x1A2 JUMP JUMPDEST PUSH2 0x5E3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH2 0x4FE PUSH2 0x1F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x510 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x847 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x329 DUP4 DUP4 ADDRESS PUSH2 0x655 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x592 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x563 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x935 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5B4 SWAP3 SWAP2 SWAP1 PUSH2 0x959 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x694 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SELFBALANCE LT ISZERO PUSH2 0x606 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xAC5 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x624 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0x9A5 JUMP JUMPDEST DUP4 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP8 CREATE2 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xFF PUSH1 0xF8 SHL DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x673 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x870 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP4 PUSH2 0x745 JUMP JUMPDEST PUSH2 0x6BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3AE SWAP1 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x6D7 SWAP2 SWAP1 PUSH2 0x8A4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x714 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x719 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x728 DUP3 DUP3 PUSH2 0x77E JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 PUSH2 0x592 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x592 SWAP2 SWAP1 PUSH2 0x827 JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x4EA JUMPI POP POP ISZERO ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x78B JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x7C2 DUP5 DUP5 PUSH2 0x78F JUMP JUMPDEST SWAP2 POP PUSH2 0x7D1 DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x78F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x7EF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x7F9 DUP7 DUP7 PUSH2 0x78F JUMP JUMPDEST SWAP4 POP PUSH2 0x808 DUP7 PUSH1 0x20 DUP8 ADD PUSH2 0x78F JUMP JUMPDEST SWAP3 POP PUSH2 0x817 DUP7 PUSH1 0x40 DUP8 ADD PUSH2 0x78F JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x838 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x329 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND DUP3 MSTORE SWAP3 SWAP1 SWAP4 SHL SWAP1 SWAP2 AND PUSH1 0x14 DUP4 ADD MSTORE PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x48 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT SWAP5 SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x60 SWAP3 SWAP1 SWAP3 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 DUP5 ADD MSTORE PUSH1 0x15 DUP4 ADD MSTORE PUSH1 0x35 DUP3 ADD MSTORE PUSH1 0x55 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x8B6 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xB05 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x8D2 DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x60 DUP6 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND SWAP1 DUP4 ADD SWAP1 DUP2 MSTORE DUP4 MLOAD PUSH2 0x8FA DUP2 PUSH1 0x14 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xB05 JUMP JUMPDEST ADD PUSH1 0x14 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x991 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xB05 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x437265617465323A2062797465636F6465206C656E677468206973207A65726F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A204661696C6564206F6E206465706C6F7900000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x4C696245524332303A204E4F5F434F4445 PUSH1 0x78 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F415050524F56455F4641 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x12531151 PUSH1 0xE2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x4368616E6E656C466163746F72793A2045524332305F5452414E534645525F46 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x1052531151 PUSH1 0xDA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x437265617465323A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB20 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xB08 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL PUSH10 0xDE65DF92B4CCBC7A81A7 0xCA 0xA7 0xFC 0xB8 PUSH6 0xAAA57251807 0xE3 0xE3 0x25 PUSH24 0xE1332D7B9064736F6C634300070100330000000000000000 ",
              "sourceMap": "420:572:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:169:15;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2094:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1701:316::-;;;;;;;;;;;;;:::i;3255:268::-;;;;;;;;;;-1:-1:-1;3255:268:15;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;754:236:42:-;;;;;;;;;;-1:-1:-1;754:236:42;;;;;:::i;:::-;;:::i;581:167::-;;;;;;;;;;-1:-1:-1;581:167:42;;;;;:::i;:::-;;:::i;2744:280:15:-;;;;;;;;;;-1:-1:-1;2744:280:15;;;;;:::i;:::-;;:::i;1506:100::-;;;;;;;;;;;;;:::i;3676:1064::-;;;;;;:::i;:::-;;:::i;2343:169::-;2437:12;2472:33;2494:10;2472:21;:33::i;:::-;2465:40;;2343:169;:::o;2094:100::-;2180:7;2094:100;:::o;1701:316::-;1753:16;1845:7;1866:10;1862:149;;1931:9;1919:21;;1901:53;;;1995:5;1984:16;;1862:149;1701:316;;:::o;3255:268::-;3355:15;3396:30;3415:5;3422:3;3396:18;:30::i;:::-;3436:41;;-1:-1:-1;;;3436:41:15;;3386:40;;-1:-1:-1;;;;;;3436:29:15;;;;;:41;;3466:5;;3473:3;;3436:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3492:24;3508:7;3492:24;;;;;;:::i;:::-;;;;;;;;3255:268;;;;:::o;754:236:42:-;849:15;890:30;909:5;916:3;890:18;:30::i;:::-;880:40;;935:24;951:7;935:24;;;;;;:::i;754:236::-;;;;;:::o;581:167::-;681:7;711:30;730:5;737:3;711:18;:30::i;:::-;704:37;581:167;-1:-1:-1;;;581:167:42:o;2744:280:15:-;2863:7;2905:112;2945:24;2958:5;2965:3;2945:12;:24::i;:::-;2987:16;;2905:22;:112::i;1506:100::-;1589:10;1506:100;:::o;3676:1064::-;3848:15;3885:25;3899:5;3906:3;3885:13;:25::i;:::-;3875:35;;4182:25;4199:7;4182:16;:25::i;:::-;4177:476;;4248:163;4291:7;4320:10;4360:4;4387:6;4248:21;:163::i;:::-;4223:259;;;;-1:-1:-1;;;4223:259:15;;;;;;;:::i;:::-;;;;;;;;;4521:51;4538:7;4555;4565:6;4521:16;:51::i;:::-;4496:146;;;;-1:-1:-1;;;4496:146:15;;;;;;;:::i;:::-;4662:71;;-1:-1:-1;;;4662:71:15;;-1:-1:-1;;;;;4662:36:15;;;;;4706:9;;4662:71;;4717:7;;4726:6;;4662:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3676:1064;;;;;;:::o;4816:252::-;4891:12;4954:23;;;;;;;;;;;;;-1:-1:-1;;;4954:23:15;;;4995:11;5024:23;;;;;;;;;;;;;-1:-1:-1;;;5024:23:15;;;4920:141;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4913:148;;4816:252;;;:::o;5278:223::-;5368:7;5391:12;5406:24;5419:5;5426:3;5406:12;:24::i;:::-;5391:39;;5447:47;5462:1;5465:4;5471:22;:20;:22::i;:::-;5447:14;:47::i;:::-;5440:54;5278:223;-1:-1:-1;;;;5278:223:15:o;5603:187::-;5700:7;5757:5;5764:3;5769:12;:10;:12::i;:::-;5740:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5730:53;;;;;;5723:60;;5603:187;;;;:::o;1752:165:9:-;1835:7;1861:49;1876:4;1882:12;1904:4;1861:14;:49::i;646:111:32:-;-1:-1:-1;;;;;726:24:32;;;646:111::o;1200:442:34:-;1346:4;1381:254;1407:7;1538:6;1566:9;1597:6;1432:189;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1432:189:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:189:34;-1:-1:-1;;;1432:189:34;;;1381:8;:254::i;:::-;1362:273;1200:442;-1:-1:-1;;;;;1200:442:34:o;826:368::-;941:4;976:211;1002:7;1120;1149:6;1027:146;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1027:146:34;;;;;;;;;;;;;;-1:-1:-1;;;;;1027:146:34;-1:-1:-1;;;1027:146:34;;;976:8;:211::i;1013:535:9:-;1100:7;1119:12;1174:6;1149:21;:31;;1141:73;;;;-1:-1:-1;;;1141:73:9;;;;;;;:::i;:::-;1232:15;;1224:65;;;;-1:-1:-1;;;1224:65:9;;;;;;;:::i;:::-;1440:4;1429:8;1423:15;1416:4;1406:8;1402:19;1394:6;1386:59;1378:67;-1:-1:-1;;;;;;1472:18:9;;1464:56;;;;-1:-1:-1;;;1464:56:9;;;;;;;:::i;2160:276::-;2261:7;2280:13;2343:4;2336:12;;2350:8;2360:4;2366:12;2319:60;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;2319:60:9;;;;;;2296:93;;2319:60;2296:93;;;;;2160:276;-1:-1:-1;;;;;2160:276:9:o;439:381:34:-;531:4;559:27;578:7;559:18;:27::i;:::-;551:57;;;;-1:-1:-1;;;551:57:34;;;;;;;:::i;:::-;619:12;633:23;660:7;-1:-1:-1;;;;;660:12:34;673:8;660:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;618:64;;;;692:48;720:7;729:10;692:27;:48::i;:::-;757:17;;:22;;:56;;;794:10;783:30;;;;;;;;;;;;:::i;718:610:8:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:8;;;1270:51;-1:-1:-1;;718:610:8:o;344:244:37:-;460:7;455:127;;546:10;540:17;533:4;521:10;517:21;510:48;492:80;344:244;;:::o;5:130:-1:-;72:20;;-1:-1;;;;;12972:54;;14100:35;;14090:2;;14149:1;;14139:12;414:366;;;535:2;523:9;514:7;510:23;506:32;503:2;;;-1:-1;;541:12;503:2;603:53;648:7;624:22;603:53;:::i;:::-;593:63;;711:53;756:7;693:2;736:9;732:22;711:53;:::i;:::-;701:63;;497:283;;;;;:::o;787:617::-;;;;;942:3;930:9;921:7;917:23;913:33;910:2;;;-1:-1;;949:12;910:2;1011:53;1056:7;1032:22;1011:53;:::i;:::-;1001:63;;1119:53;1164:7;1101:2;1144:9;1140:22;1119:53;:::i;:::-;1109:63;;1227:53;1272:7;1209:2;1252:9;1248:22;1227:53;:::i;:::-;904:500;;;;-1:-1;1217:63;;1317:2;1356:22;344:20;;-1:-1;;904:500::o;1411:257::-;;1523:2;1511:9;1502:7;1498:23;1494:32;1491:2;;;-1:-1;;1529:12;1491:2;223:6;217:13;14246:5;12654:13;12647:21;14224:5;14221:32;14211:2;;-1:-1;;14257:12;5364:531;-1:-1;;;;;;14013:2;14009:14;;;;;1884:58;;14009:14;;;;;;;5645:2;5636:12;;1884:58;5747:12;;;2198:58;5858:12;;;5536:359::o;5902:665::-;-1:-1;;;;;;12741:78;;;;2041:56;;14013:2;14009:14;;;;-1:-1;;;;;;14009:14;6207:1;6198:11;;1884:58;6308:12;;;2198:58;6419:12;;;2198:58;6530:12;;;6100:467::o;6574:271::-;;2778:5;11953:12;2889:52;2934:6;2929:3;2922:4;2915:5;2911:16;2889:52;:::i;:::-;2953:16;;;;;6708:137;-1:-1;;6708:137::o;6852:567::-;;2778:5;11953:12;2889:52;2934:6;2929:3;2922:4;2915:5;2911:16;2889:52;:::i;:::-;14013:2;14009:14;;;-1:-1;;;;;;14009:14;2953:16;;;1884:58;;;11953:12;;2889:52;11953:12;7280:2;7271:12;;2922:4;2911:16;;2889:52;:::i;:::-;2953:16;7280:2;2953:16;;7060:359;-1:-1;;;;;7060:359::o;7426:222::-;-1:-1;;;;;12972:54;;;;1746:37;;7553:2;7538:18;;7524:124::o;7655:333::-;-1:-1;;;;;12972:54;;;1746:37;;12972:54;;7974:2;7959:18;;1746:37;7810:2;7795:18;;7781:207::o;7995:444::-;-1:-1;;;;;12972:54;;;1746:37;;12972:54;;;;8342:2;8327:18;;1746:37;8425:2;8410:18;;2198:58;;;;8178:2;8163:18;;8149:290::o;8446:333::-;-1:-1;;;;;12972:54;;;;1746:37;;8765:2;8750:18;;2198:58;8601:2;8586:18;;8572:207::o;8786:306::-;;8931:2;8952:17;8945:47;2410:5;11953:12;12109:6;8931:2;8920:9;8916:18;12097:19;2503:52;2548:6;12137:14;8920:9;12137:14;8931:2;2529:5;2525:16;2503:52;:::i;:::-;13918:7;13902:14;-1:-1;;13898:28;2567:39;;;;12137:14;2567:39;;8902:190;-1:-1;;8902:190::o;9099:416::-;9299:2;9313:47;;;9284:18;;;12097:19;3242:34;12137:14;;;3222:55;3296:12;;;9270:245::o;9522:416::-;9722:2;9736:47;;;3547:2;9707:18;;;12097:19;3583:27;12137:14;;;3563:48;3630:12;;;9693:245::o;9945:416::-;10145:2;10159:47;;;3881:2;10130:18;;;12097:19;-1:-1;;;12137:14;;;3897:40;3956:12;;;10116:245::o;10368:416::-;10568:2;10582:47;;;4207:2;10553:18;;;12097:19;4243:34;12137:14;;;4223:55;-1:-1;;;4298:12;;;4291:28;4338:12;;;10539:245::o;10791:416::-;10991:2;11005:47;;;4589:2;10976:18;;;12097:19;4625:34;12137:14;;;4605:55;-1:-1;;;4680:12;;;4673:29;4721:12;;;10962:245::o;11214:416::-;11414:2;11428:47;;;4972:2;11399:18;;;12097:19;5008:31;12137:14;;;4988:52;5059:12;;;11385:245::o;11637:222::-;2198:58;;;11764:2;11749:18;;11735:124::o;13118:268::-;13183:1;13190:101;13204:6;13201:1;13198:13;13190:101;;;13271:11;;;13265:18;13252:11;;;13245:39;13226:2;13219:10;13190:101;;;13306:6;13303:1;13300:13;13297:2;;;13183:1;13362:6;13357:3;13353:16;13346:27;13297:2;;13167:219;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "584600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "createChannel(address,address)": "infinite",
                "createChannelAndDepositAlice(address,address,address,uint256)": "infinite",
                "createChannelWithoutSetup(address,address)": "infinite",
                "deployChannelProxyWithoutSetup(address,address)": "infinite",
                "getChainId()": "infinite",
                "getChannelAddress(address,address)": "infinite",
                "getMastercopy()": "infinite",
                "getProxyCreationCode()": "infinite",
                "getStoredChainId()": "infinite"
              }
            },
            "methodIdentifiers": {
              "createChannel(address,address)": "35a1ba6f",
              "createChannelAndDepositAlice(address,address,address,uint256)": "fe454501",
              "createChannelWithoutSetup(address,address)": "5b056cb5",
              "deployChannelProxyWithoutSetup(address,address)": "a25dbcc9",
              "getChainId()": "3408e470",
              "getChannelAddress(address,address)": "e617aaac",
              "getMastercopy()": "efe43693",
              "getProxyCreationCode()": "15727e91",
              "getStoredChainId()": "32a130c9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mastercopy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"name\":\"ChannelCreation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"createChannel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"createChannelAndDepositAlice\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"createChannelWithoutSetup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"channel\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"deployChannelProxyWithoutSetup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"alice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bob\",\"type\":\"address\"}],\"name\":\"getChannelAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMastercopy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStoredChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Layne Haber <layne@connext.network>\",\"kind\":\"dev\",\"methods\":{\"createChannel(address,address)\":{\"details\":\"Allows us to create new channel contract and get it all set up in one transaction\",\"params\":{\"alice\":\"address of the high fidelity channel participant\",\"bob\":\"address of the other channel participant\"}},\"createChannelAndDepositAlice(address,address,address,uint256)\":{\"details\":\"Allows us to create a new channel contract and fund it in one transaction\",\"params\":{\"bob\":\"address of the other channel participant\"}},\"getChainId()\":{\"details\":\"Allows us to get the chainId that this factory will use in the create2 salt\"},\"getChannelAddress(address,address)\":{\"details\":\"Allows us to get the address for a new channel contract created via `createChannel`\",\"params\":{\"alice\":\"address of the igh fidelity channel participant\",\"bob\":\"address of the other channel participant\"}},\"getMastercopy()\":{\"details\":\"Allows us to get the mastercopy that this factory will deploy channels against\"},\"getProxyCreationCode()\":{\"details\":\"Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`\"},\"getStoredChainId()\":{\"details\":\"Allows us to get the chainId that this factory has stored\"}},\"title\":\"TestChannelFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This factory is used for testing *ONLY* and allows you to         deploy contracts without setting them up (to run the CMCCore         setup tests)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/TestChannelFactory.sol\":\"TestChannelFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Create2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\\n * `CREATE2` can be used to compute in advance the address where a smart\\n * contract will be deployed, which allows for interesting new mechanisms known\\n * as 'counterfactual interactions'.\\n *\\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\\n * information.\\n */\\nlibrary Create2 {\\n    /**\\n     * @dev Deploys a contract using `CREATE2`. The address where the contract\\n     * will be deployed can be known in advance via {computeAddress}.\\n     *\\n     * The bytecode for a contract can be obtained from Solidity with\\n     * `type(contractName).creationCode`.\\n     *\\n     * Requirements:\\n     *\\n     * - `bytecode` must not be empty.\\n     * - `salt` must have not been used for `bytecode` already.\\n     * - the factory must have a balance of at least `amount`.\\n     * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\\n     */\\n    function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {\\n        address addr;\\n        require(address(this).balance >= amount, \\\"Create2: insufficient balance\\\");\\n        require(bytecode.length != 0, \\\"Create2: bytecode length is zero\\\");\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\\n        }\\n        require(addr != address(0), \\\"Create2: Failed on deploy\\\");\\n        return addr;\\n    }\\n\\n    /**\\n     * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\\n     * `bytecodeHash` or `salt` will result in a new destination address.\\n     */\\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\\n        return computeAddress(salt, bytecodeHash, address(this));\\n    }\\n\\n    /**\\n     * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\\n     * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\\n     */\\n    function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {\\n        bytes32 _data = keccak256(\\n            abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)\\n        );\\n        return address(uint256(_data));\\n    }\\n}\\n\",\"keccak256\":\"0x539295edd21ad514c0b1a0d1c89ada0831942f379ea83b6eb85769211fc7937e\",\"license\":\"MIT\"},\"src.sol/ChannelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/utils/Create2.sol\\\";\\n\\nimport \\\"./interfaces/IChannelFactory.sol\\\";\\nimport \\\"./interfaces/IVectorChannel.sol\\\";\\nimport \\\"./lib/LibAsset.sol\\\";\\nimport \\\"./lib/LibERC20.sol\\\";\\n\\n/// @title ChannelFactory\\n/// @author Connext <support@connext.network>\\n/// @notice Creates and sets up a new channel proxy contract\\ncontract ChannelFactory is IChannelFactory {\\n    // Creation code constants taken from EIP1167\\n    bytes private constant proxyCreationCodePrefix =\\n        hex\\\"3d602d80600a3d3981f3_363d3d373d3d3d363d73\\\";\\n    bytes private constant proxyCreationCodeSuffix =\\n        hex\\\"5af43d82803e903d91602b57fd5bf3\\\";\\n\\n    bytes32 private creationCodeHash;\\n    address private immutable mastercopy;\\n    uint256 private immutable chainId;\\n\\n    /// @dev Creates a new `ChannelFactory`\\n    /// @param _mastercopy the address of the `ChannelMastercopy` (channel logic)\\n    /// @param _chainId the chain identifier when generating the CREATE2 salt. If zero, the chain identifier used in the proxy salt will be the result of the opcode\\n    constructor(address _mastercopy, uint256 _chainId) {\\n        mastercopy = _mastercopy;\\n        chainId = _chainId;\\n        creationCodeHash = keccak256(_getProxyCreationCode(_mastercopy));\\n    }\\n\\n    ////////////////////////////////////////\\n    // Public Methods\\n\\n    /// @dev Allows us to get the mastercopy that this factory will deploy channels against\\n    function getMastercopy() external view override returns (address) {\\n        return mastercopy;\\n    }\\n\\n    /// @dev Allows us to get the chainId that this factory will use in the create2 salt\\n    function getChainId() public view override returns (uint256 _chainId) {\\n        // Hold in memory to reduce sload calls\\n        uint256 chain = chainId;\\n        if (chain == 0) {\\n            assembly {\\n                _chainId := chainid()\\n            }\\n        } else {\\n            _chainId = chain;\\n        }\\n    }\\n\\n    /// @dev Allows us to get the chainId that this factory has stored\\n    function getStoredChainId() external view override returns (uint256) {\\n        return chainId;\\n    }\\n\\n    /// @dev Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`\\n    function getProxyCreationCode()\\n        public\\n        view\\n        override\\n        returns (bytes memory)\\n    {\\n        return _getProxyCreationCode(mastercopy);\\n    }\\n\\n    /// @dev Allows us to get the address for a new channel contract created via `createChannel`\\n    /// @param alice address of the igh fidelity channel participant\\n    /// @param bob address of the other channel participant\\n    function getChannelAddress(address alice, address bob)\\n        external\\n        view\\n        override\\n        returns (address)\\n    {\\n        return\\n            Create2.computeAddress(\\n                generateSalt(alice, bob),\\n                creationCodeHash\\n            );\\n    }\\n\\n    /// @dev Allows us to create new channel contract and get it all set up in one transaction\\n    /// @param alice address of the high fidelity channel participant\\n    /// @param bob address of the other channel participant\\n    function createChannel(address alice, address bob)\\n        public\\n        override\\n        returns (address channel)\\n    {\\n        channel = deployChannelProxy(alice, bob);\\n        IVectorChannel(channel).setup(alice, bob);\\n        emit ChannelCreation(channel);\\n    }\\n\\n    /// @dev Allows us to create a new channel contract and fund it in one transaction\\n    /// @param bob address of the other channel participant\\n    function createChannelAndDepositAlice(\\n        address alice,\\n        address bob,\\n        address assetId,\\n        uint256 amount\\n    ) external payable override returns (address channel) {\\n        channel = createChannel(alice, bob);\\n        // Deposit funds (if a token) must be approved for the\\n        // `ChannelFactory`, which then claims the funds and transfers\\n        // to the channel address. While this is inefficient, this is\\n        // the safest/clearest way to transfer funds\\n        if (!LibAsset.isEther(assetId)) {\\n            require(\\n                LibERC20.transferFrom(\\n                    assetId,\\n                    msg.sender,\\n                    address(this),\\n                    amount\\n                ),\\n                \\\"ChannelFactory: ERC20_TRANSFER_FAILED\\\"\\n            );\\n            require(\\n                LibERC20.approve(assetId, address(channel), amount),\\n                \\\"ChannelFactory: ERC20_APPROVE_FAILED\\\"\\n            );\\n        }\\n        IVectorChannel(channel).depositAlice{value: msg.value}(assetId, amount);\\n    }\\n\\n    ////////////////////////////////////////\\n    // Internal Methods\\n\\n    function _getProxyCreationCode(address _mastercopy) internal pure returns (bytes memory) {\\n      return abi.encodePacked(\\n                proxyCreationCodePrefix,\\n                _mastercopy,\\n                proxyCreationCodeSuffix\\n            );\\n    }\\n\\n    /// @dev Allows us to create new channel contact using CREATE2\\n    /// @param alice address of the high fidelity participant in the channel\\n    /// @param bob address of the other channel participant\\n    function deployChannelProxy(address alice, address bob)\\n        internal\\n        returns (address)\\n    {\\n        bytes32 salt = generateSalt(alice, bob);\\n        return Create2.deploy(0, salt, getProxyCreationCode());\\n    }\\n\\n    /// @dev Generates the unique salt for calculating the CREATE2 address of the channel proxy\\n    function generateSalt(address alice, address bob)\\n        internal\\n        view\\n        returns (bytes32)\\n    {\\n        return keccak256(abi.encodePacked(alice, bob, getChainId()));\\n    }\\n}\\n\",\"keccak256\":\"0x9b30b13dd79eea72eadd2bec3eba0f515929259a21d2ece6b982703c280e532a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAdjudicator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./Types.sol\\\";\\n\\ninterface ICMCAdjudicator {\\n    struct CoreChannelState {\\n        address channelAddress;\\n        address alice;\\n        address bob;\\n        address[] assetIds;\\n        Balance[] balances;\\n        uint256[] processedDepositsA;\\n        uint256[] processedDepositsB;\\n        uint256[] defundNonces;\\n        uint256 timeout;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n    }\\n\\n    struct CoreTransferState {\\n        address channelAddress;\\n        bytes32 transferId;\\n        address transferDefinition;\\n        address initiator;\\n        address responder;\\n        address assetId;\\n        Balance balance;\\n        uint256 transferTimeout;\\n        bytes32 initialStateHash;\\n    }\\n\\n    struct ChannelDispute {\\n        bytes32 channelStateHash;\\n        uint256 nonce;\\n        bytes32 merkleRoot;\\n        uint256 consensusExpiry;\\n        uint256 defundExpiry;\\n    }\\n\\n    struct TransferDispute {\\n        bytes32 transferStateHash;\\n        uint256 transferDisputeExpiry;\\n        bool isDefunded;\\n    }\\n\\n    event ChannelDisputed(\\n        address disputer,\\n        CoreChannelState state,\\n        ChannelDispute dispute\\n    );\\n\\n    event ChannelDefunded(\\n        address defunder,\\n        CoreChannelState state,\\n        ChannelDispute dispute,\\n        address[] assetIds\\n    );\\n\\n    event TransferDisputed(\\n        address disputer,\\n        CoreTransferState state,\\n        TransferDispute dispute\\n    );\\n\\n    event TransferDefunded(\\n        address defunder,\\n        CoreTransferState state,\\n        TransferDispute dispute,\\n        bytes encodedInitialState,\\n        bytes encodedResolver,\\n        Balance balance\\n    );\\n\\n    function getChannelDispute() external view returns (ChannelDispute memory);\\n\\n    function getDefundNonce(address assetId) external view returns (uint256);\\n\\n    function getTransferDispute(bytes32 transferId)\\n        external\\n        view\\n        returns (TransferDispute memory);\\n\\n    function disputeChannel(\\n        CoreChannelState calldata ccs,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n\\n    function defundChannel(\\n        CoreChannelState calldata ccs,\\n        address[] calldata assetIds,\\n        uint256[] calldata indices\\n    ) external;\\n\\n    function disputeTransfer(\\n        CoreTransferState calldata cts,\\n        bytes32[] calldata merkleProofData\\n    ) external;\\n\\n    function defundTransfer(\\n        CoreTransferState calldata cts,\\n        bytes calldata encodedInitialTransferState,\\n        bytes calldata encodedTransferResolver,\\n        bytes calldata responderSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x88522bb51c2b9991b24ef33a3c776ac76d96060ebbc33cd5b2b14513fb21d237\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCAsset {\\n    function getTotalTransferred(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getExitableAmount(address assetId, address owner)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function exit(\\n        address assetId,\\n        address owner,\\n        address payable recipient\\n    ) external;\\n}\\n\",\"keccak256\":\"0x895d89536e8ca469afe642b7001f0dfff497ce29d5d73f862b07a1cdc483f3f7\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCCore.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCCore {\\n    function setup(address _alice, address _bob) external;\\n\\n    function getAlice() external view returns (address);\\n\\n    function getBob() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8e8da2d8fb5198441ba6cdff018dff9e4145b07d575647c990659adad637ec8c\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCDeposit.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface ICMCDeposit {\\n    event AliceDeposited(address assetId, uint256 amount);\\n    \\n    function getTotalDepositsAlice(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getTotalDepositsBob(address assetId)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function depositAlice(address assetId, uint256 amount) external payable;\\n}\\n\",\"keccak256\":\"0xdf6f284e44d88013cf9d51220315fb37e63086e470442685891c90aadd138295\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ICMCWithdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct WithdrawData {\\n    address channelAddress;\\n    address assetId;\\n    address payable recipient;\\n    uint256 amount;\\n    uint256 nonce;\\n    address callTo;\\n    bytes callData;\\n}\\n\\ninterface ICMCWithdraw {\\n    function getWithdrawalTransactionRecord(WithdrawData calldata wd)\\n        external\\n        view\\n        returns (bool);\\n\\n    function withdraw(\\n        WithdrawData calldata wd,\\n        bytes calldata aliceSignature,\\n        bytes calldata bobSignature\\n    ) external;\\n}\\n\",\"keccak256\":\"0x097dfe95ad19096f9a3dd0138b4a51680c26e665d1639278a7c0a5c9f7fc5c78\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IChannelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\ninterface IChannelFactory {\\n    event ChannelCreation(address channel);\\n\\n    function getMastercopy() external view returns (address);\\n\\n    function getChainId() external view returns (uint256);\\n\\n    function getStoredChainId() external view returns (uint256);\\n\\n    function getProxyCreationCode() external view returns (bytes memory);\\n\\n    function getChannelAddress(address alice, address bob)\\n        external\\n        view\\n        returns (address);\\n\\n    function createChannel(address alice, address bob)\\n        external\\n        returns (address);\\n\\n    function createChannelAndDepositAlice(\\n        address alice,\\n        address bob,\\n        address assetId,\\n        uint256 amount\\n    ) external payable returns (address);\\n}\\n\",\"keccak256\":\"0x2330bd554f878feb2494fb9dd830a1707865b63cfd6471a8dad1e5912ebf72ea\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/IVectorChannel.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ICMCCore.sol\\\";\\nimport \\\"./ICMCAsset.sol\\\";\\nimport \\\"./ICMCDeposit.sol\\\";\\nimport \\\"./ICMCWithdraw.sol\\\";\\nimport \\\"./ICMCAdjudicator.sol\\\";\\n\\ninterface IVectorChannel is\\n    ICMCCore,\\n    ICMCAsset,\\n    ICMCDeposit,\\n    ICMCWithdraw,\\n    ICMCAdjudicator\\n{}\\n\",\"keccak256\":\"0x9e21e3b6510bb5aecab999bfcbefe6184bd2be5a80179ef8ecadb63ddd2c8d53\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibERC20.sol\\\";\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n\\n/// @title LibAsset\\n/// @author Connext <support@connext.network>\\n/// @notice This library contains helpers for dealing with onchain transfers\\n///         of in-channel assets. It is designed to safely handle all asset\\n///         transfers out of channel in the event of an onchain dispute. Also\\n///         safely handles ERC20 transfers that may be non-compliant\\nlibrary LibAsset {\\n    address constant ETHER_ASSETID = address(0);\\n\\n    function isEther(address assetId) internal pure returns (bool) {\\n        return assetId == ETHER_ASSETID;\\n    }\\n\\n    function getOwnBalance(address assetId) internal view returns (uint256) {\\n        return\\n            isEther(assetId)\\n                ? address(this).balance\\n                : IERC20(assetId).balanceOf(address(this));\\n    }\\n\\n    function transferEther(address payable recipient, uint256 amount)\\n        internal\\n        returns (bool)\\n    {\\n        (bool success, bytes memory returnData) =\\n            recipient.call{value: amount}(\\\"\\\");\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return true;\\n    }\\n\\n    function transferERC20(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return LibERC20.transfer(assetId, recipient, amount);\\n    }\\n\\n    // This function is a wrapper for transfers of Ether or ERC20 tokens,\\n    // both standard-compliant ones as well as tokens that exhibit the\\n    // missing-return-value bug.\\n    // Although it behaves very much like Solidity's `transfer` function\\n    // or the ERC20 `transfer` and is, in fact, designed to replace direct\\n    // usage of those, it is deliberately named `unregisteredTransfer`,\\n    // because we need to register every transfer out of the channel.\\n    // Therefore, it should normally not be used directly, with the single\\n    // exception of the `transferAsset` function in `CMCAsset.sol`,\\n    // which combines the \\\"naked\\\" unregistered transfer given below\\n    // with a registration.\\n    // USING THIS FUNCTION SOMEWHERE ELSE IS PROBABLY WRONG!\\n    function unregisteredTransfer(\\n        address assetId,\\n        address payable recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            isEther(assetId)\\n                ? transferEther(recipient, amount)\\n                : transferERC20(assetId, recipient, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x02e7b660846ad2f56f8005f786e0e2eb1d625c83f4cfcf9fc07a9566ca86195c\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./LibUtils.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/// @title LibERC20\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides several functions to safely handle\\n///         noncompliant tokens (i.e. does not return a boolean from\\n///         the transfer function)\\n\\nlibrary LibERC20 {\\n    function wrapCall(address assetId, bytes memory callData)\\n        internal\\n        returns (bool)\\n    {\\n        require(Address.isContract(assetId), \\\"LibERC20: NO_CODE\\\");\\n        (bool success, bytes memory returnData) = assetId.call(callData);\\n        LibUtils.revertIfCallFailed(success, returnData);\\n        return returnData.length == 0 || abi.decode(returnData, (bool));\\n    }\\n\\n    function approve(\\n        address assetId,\\n        address spender,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"approve(address,uint256)\\\",\\n                    spender,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transferFrom(\\n        address assetId,\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transferFrom(address,address,uint256)\\\",\\n                    sender,\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n\\n    function transfer(\\n        address assetId,\\n        address recipient,\\n        uint256 amount\\n    ) internal returns (bool) {\\n        return\\n            wrapCall(\\n                assetId,\\n                abi.encodeWithSignature(\\n                    \\\"transfer(address,uint256)\\\",\\n                    recipient,\\n                    amount\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x5bad1474c93a295939c23f976786f0d086abc063f19ff9c8c1d069759c4a7ff5\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\n/// @title LibUtils\\n/// @author Connext <support@connext.network>\\n/// @notice Contains a helper to revert if a call was not successfully\\n///         made\\nlibrary LibUtils {\\n    // If success is false, reverts and passes on the revert string.\\n    function revertIfCallFailed(bool success, bytes memory returnData)\\n        internal\\n        pure\\n    {\\n        if (!success) {\\n            assembly {\\n                revert(add(returnData, 0x20), mload(returnData))\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf31897ed92b88739ca9c6e74d089e01c5dbf432183d2ab0b959b539842374ccd\",\"license\":\"UNLICENSED\"},\"src.sol/testing/TestChannelFactory.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/IVectorChannel.sol\\\";\\nimport \\\"../ChannelFactory.sol\\\";\\n\\n/// @title TestChannelFactory\\n/// @author Layne Haber <layne@connext.network>\\n/// @notice This factory is used for testing *ONLY* and allows you to\\n///         deploy contracts without setting them up (to run the CMCCore\\n///         setup tests)\\ncontract TestChannelFactory is ChannelFactory {\\n    constructor(address _mastercopy, uint256 _chainId)\\n        ChannelFactory(_mastercopy, _chainId)\\n    {}\\n\\n    function deployChannelProxyWithoutSetup(address alice, address bob)\\n        public\\n        returns (address)\\n    {\\n        return deployChannelProxy(alice, bob);\\n    }\\n\\n    function createChannelWithoutSetup(address alice, address bob)\\n        public\\n        returns (address channel)\\n    {\\n        channel = deployChannelProxy(alice, bob);\\n        emit ChannelCreation(channel);\\n        return channel;\\n    }\\n}\\n\",\"keccak256\":\"0x5bf3c7a8ee4e06e226773f57e220032f19414e16aa8ff936244adee124c383c4\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3100,
                "contract": "src.sol/testing/TestChannelFactory.sol:TestChannelFactory",
                "label": "creationCodeHash",
                "offset": 0,
                "slot": "0",
                "type": "t_bytes32"
              }
            ],
            "types": {
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This factory is used for testing *ONLY* and allows you to         deploy contracts without setting them up (to run the CMCCore         setup tests)",
            "version": 1
          }
        }
      },
      "src.sol/testing/TestLibIterableMapping.sol": {
        "TestLibIterableMapping": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "transfer",
                  "type": "tuple"
                }
              ],
              "name": "addTransferDefinition",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "getTransferDefinitionByIndex",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                }
              ],
              "name": "getTransferDefinitionByName",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getTransferDefinitions",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "s",
                  "type": "string"
                }
              ],
              "name": "isEmptyString",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "length",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                }
              ],
              "name": "nameExists",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                }
              ],
              "name": "removeTransferDefinition",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "s",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "t",
                  "type": "string"
                }
              ],
              "name": "stringEqual",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Layne Haber <layne@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "TestLibIterableMapping",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50611383806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a45f379e11610066578063a45f379e146100fe578063c981ccc314610111578063c9ff4d2514610131578063cc637afe14610146578063e61311171461015957610093565b80631f7b6d321461009857806355304c3f146100b6578063961bf9b1146100cb578063a1298368146100de575b600080fd5b6100a061016c565b6040516100ad91906112f1565b60405180910390f35b6100c96100c4366004610f40565b61017d565b005b6100c96100d9366004610ea4565b61018b565b6100f16100ec366004610edf565b610196565b6040516100ad91906111d3565b6100f161010c366004610ea4565b6101ab565b61012461011f366004611026565b6101b6565b6040516100ad91906112de565b6101396101c9565b6040516100ad9190611173565b6100f1610154366004610ea4565b6101d5565b610124610167366004610ea4565b6101e2565b600061017860006101f5565b905090565b6101886000826101fc565b50565b610188600082610357565b60006101a28383610575565b90505b92915050565b60006101a5826105ce565b6101be610d19565b6101a56000836105e9565b606061017860006108bc565b60006101a5600083610beb565b6101ea610d19565b6101a5600083610cdb565b6001015490565b8051610207816105ce565b1561022d5760405162461bcd60e51b815260040161022490611224565b60405180910390fd5b6102378382610beb565b156102545760405162461bcd60e51b8152600401610224906111de565b60408051808201825283815260018501546020820152905184906102799084906110e7565b908152604051602091819003820190208251805180519293919284926102a3928492910190610d51565b506020828101516001830180546001600160a01b0319166001600160a01b03909216919091179055604083015180516102e29260028501920190610d51565b50606082015180516102fe916003840191602090910190610d51565b506080820151805161031a916004840191602090910190610d51565b5050506020918201516005909101556001808501805491820181556000908152829020835161035193919092019190840190610d51565b50505050565b610360816105ce565b1561037d5760405162461bcd60e51b815260040161022490611224565b6103878282610beb565b6103a35760405162461bcd60e51b81526004016102249061129c565b600082600001826040516103b791906110e7565b9081526040519081900360200190206005015460018401805491925060609160001981019081106103e457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156104725780601f1061044757610100808354040283529160200191610472565b820191906000526020600020905b81548152906001019060200180831161045557829003601f168201915b5050505050905081846000018260405161048c91906110e7565b908152602001604051809103902060050181905550808460010183815481106104b157fe5b9060005260206000200190805190602001906104ce929190610d51565b5060405184906104df9085906110e7565b908152604051908190036020019020600081816104fc8282610dcf565b6001820180546001600160a01b031916905561051c600283016000610dcf565b61052a600383016000610dcf565b610538600483016000610dcf565b5050600582016000905550508360010180548061055157fe5b60019003818190600052602060002001600061056d9190610dcf565b905550505050565b60008160405160200161058891906110e7565b60405160208183030381529060405280519060200120836040516020016105af91906110e7565b6040516020818303038152906040528051906020012014905092915050565b60006101a58260405180602001604052806000815250610575565b6105f1610d19565b600183015482106106145760405162461bcd60e51b81526004016102249061125b565b8260000183600101838154811061062757fe5b9060005260206000200160405161063e9190611103565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a082018481529193909284929184918401828280156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156107835780601f1061075857610100808354040283529160200191610783565b820191906000526020600020905b81548152906001019060200180831161076657829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156108ab5780601f10610880576101008083540402835291602001916108ab565b820191906000526020600020905b81548152906001019060200180831161088e57829003601f168201915b505050505081525050905092915050565b6001810154606090818167ffffffffffffffff811180156108dc57600080fd5b5060405190808252806020026020018201604052801561091657816020015b610903610d19565b8152602001906001900390816108fb5790505b50905060005b82811015610be3578460000185600101828154811061093757fe5b9060005260206000200160405161094e9190611103565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a082018481529193909284929184918401828280156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610b275780601f10610afc57610100808354040283529160200191610b27565b820191906000526020600020905b815481529060010190602001808311610b0a57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b505050505081525050828281518110610bd057fe5b602090810291909101015260010161091c565b509392505050565b6000610bf6826105ce565b158015610c065750600183015415155b80156101a257506101a2836001018460000184604051610c2691906110e7565b90815260200160405180910390206005015481548110610c4257fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610cd05780601f10610ca557610100808354040283529160200191610cd0565b820191906000526020600020905b815481529060010190602001808311610cb357829003601f168201915b505050505083610575565b610ce3610d19565b610ced8383610beb565b610d095760405162461bcd60e51b81526004016102249061129c565b604051839061063e9084906110e7565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d9257805160ff1916838001178555610dbf565b82800160010185558215610dbf579182015b82811115610dbf578251825591602001919060010190610da4565b50610dcb929150610e0f565b5090565b50805460018160011615610100020316600290046000825580601f10610df55750610188565b601f01602090049060005260206000209081019061018891905b5b80821115610dcb5760008155600101610e10565b80356001600160a01b03811681146101a557600080fd5b600082601f830112610e4b578081fd5b813567ffffffffffffffff811115610e61578182fd5b610e74601f8201601f19166020016112fa565b9150808252836020828501011115610e8b57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610eb5578081fd5b813567ffffffffffffffff811115610ecb578182fd5b610ed784828501610e3b565b949350505050565b60008060408385031215610ef1578081fd5b823567ffffffffffffffff80821115610f08578283fd5b610f1486838701610e3b565b93506020850135915080821115610f29578283fd5b50610f3685828601610e3b565b9150509250929050565b600060208284031215610f51578081fd5b813567ffffffffffffffff80821115610f68578283fd5b9083019060a08286031215610f7b578283fd5b610f8560a06112fa565b823582811115610f93578485fd5b610f9f87828601610e3b565b825250610faf8660208501610e24565b6020820152604083013582811115610fc5578485fd5b610fd187828601610e3b565b604083015250606083013582811115610fe8578485fd5b610ff487828601610e3b565b60608301525060808301358281111561100b578485fd5b61101787828601610e3b565b60808301525095945050505050565b600060208284031215611037578081fd5b5035919050565b60008151808452611056816020860160208601611321565b601f01601f19169290920160200192915050565b6000815160a0845261107f60a085018261103e565b905060018060a01b036020840151166020850152604083015184820360408601526110aa828261103e565b915050606083015184820360608601526110c4828261103e565b915050608083015184820360808601526110de828261103e565b95945050505050565b600082516110f9818460208701611321565b9190910192915050565b6000808354600180821660008114611122576001811461113957611168565b60ff198316865260028304607f1686019350611168565b600283048786526020808720875b838110156111605781548a820152908501908201611147565b505050860193505b509195945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156111c657603f198886030184526111b485835161106a565b94509285019290850190600101611198565b5092979650505050505050565b901515815260200190565b60208082526026908201527f4c69624974657261626c654d617070696e673a204e414d455f414c524541445960408201526517d05111115160d21b606082015260800190565b6020808252601e908201527f4c69624974657261626c654d617070696e673a20454d5054595f4e414d450000604082015260600190565b60208082526021908201527f4c69624974657261626c654d617070696e673a20494e56414c49445f494e44456040820152600b60fb1b606082015260800190565b60208082526022908201527f4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f55604082015261139160f21b606082015260800190565b6000602082526101a2602083018461106a565b90815260200190565b60405181810167ffffffffffffffff8111828210171561131957600080fd5b604052919050565b60005b8381101561133c578181015183820152602001611324565b83811115610351575050600091015256fea264697066735822122053e7025603d4f9292ad0639332a3757a78662668f35ccbace63f8090fb18604664736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1383 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA45F379E GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA45F379E EQ PUSH2 0xFE JUMPI DUP1 PUSH4 0xC981CCC3 EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0xC9FF4D25 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xCC637AFE EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0xE6131117 EQ PUSH2 0x159 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x1F7B6D32 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x55304C3F EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x961BF9B1 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0xA1298368 EQ PUSH2 0xDE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x16C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x12F1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0xC4 CALLDATASIZE PUSH1 0x4 PUSH2 0xF40 JUMP JUMPDEST PUSH2 0x17D JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC9 PUSH2 0xD9 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x18B JUMP JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xEDF JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x11D3 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x10C CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x124 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x1026 JUMP JUMPDEST PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x139 PUSH2 0x1C9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x1173 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x154 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x1D5 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x1E2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x178 PUSH1 0x0 PUSH2 0x1F5 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x188 PUSH1 0x0 DUP3 PUSH2 0x1FC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x188 PUSH1 0x0 DUP3 PUSH2 0x357 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A2 DUP4 DUP4 PUSH2 0x575 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A5 DUP3 PUSH2 0x5CE JUMP JUMPDEST PUSH2 0x1BE PUSH2 0xD19 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x0 DUP4 PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x178 PUSH1 0x0 PUSH2 0x8BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A5 PUSH1 0x0 DUP4 PUSH2 0xBEB JUMP JUMPDEST PUSH2 0x1EA PUSH2 0xD19 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x0 DUP4 PUSH2 0xCDB JUMP JUMPDEST PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x207 DUP2 PUSH2 0x5CE JUMP JUMPDEST ISZERO PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x1224 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x237 DUP4 DUP3 PUSH2 0xBEB JUMP JUMPDEST ISZERO PUSH2 0x254 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x1 DUP6 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP1 PUSH2 0x279 SWAP1 DUP5 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 SWAP2 DUP2 SWAP1 SUB DUP3 ADD SWAP1 KECCAK256 DUP3 MLOAD DUP1 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH2 0x2A3 SWAP3 DUP5 SWAP3 SWAP2 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x1 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x2E2 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x2FE SWAP2 PUSH1 0x3 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x31A SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP POP POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE PUSH1 0x1 DUP1 DUP6 ADD DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x351 SWAP4 SWAP2 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP5 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x360 DUP2 PUSH2 0x5CE JUMP JUMPDEST ISZERO PUSH2 0x37D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x1224 JUMP JUMPDEST PUSH2 0x387 DUP3 DUP3 PUSH2 0xBEB JUMP JUMPDEST PUSH2 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x3B7 SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0x1 DUP5 ADD DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x3E4 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x472 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x447 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x472 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x455 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP2 DUP5 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x48C SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x4B1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x4CE SWAP3 SWAP2 SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP5 SWAP1 PUSH2 0x4DF SWAP1 DUP6 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x0 DUP2 DUP2 PUSH2 0x4FC DUP3 DUP3 PUSH2 0xDCF JUMP JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x51C PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0xDCF JUMP JUMPDEST PUSH2 0x52A PUSH1 0x3 DUP4 ADD PUSH1 0x0 PUSH2 0xDCF JUMP JUMPDEST PUSH2 0x538 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0xDCF JUMP JUMPDEST POP POP PUSH1 0x5 DUP3 ADD PUSH1 0x0 SWAP1 SSTORE POP POP DUP4 PUSH1 0x1 ADD DUP1 SLOAD DUP1 PUSH2 0x551 JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x56D SWAP2 SWAP1 PUSH2 0xDCF JUMP JUMPDEST SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x588 SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5AF SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A5 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x575 JUMP JUMPDEST PUSH2 0x5F1 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP3 LT PUSH2 0x614 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x125B JUMP JUMPDEST DUP3 PUSH1 0x0 ADD DUP4 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x627 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0x63E SWAP2 SWAP1 PUSH2 0x1103 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6D9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6BC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x783 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x758 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x783 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x766 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x817 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7EC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x817 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x7FA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x8AB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x880 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8AB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x88E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x916 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x903 PUSH2 0xD19 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x8FB JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xBE3 JUMPI DUP5 PUSH1 0x0 ADD DUP6 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x937 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x1103 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x9E9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9BE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x9E9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x9CC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA93 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA68 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA93 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA76 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xB27 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xAFC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB27 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB0A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xBBB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB90 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBBB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB9E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBD0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x91C JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF6 DUP3 PUSH2 0x5CE JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0xC06 JUMPI POP PUSH1 0x1 DUP4 ADD SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1A2 JUMPI POP PUSH2 0x1A2 DUP4 PUSH1 0x1 ADD DUP5 PUSH1 0x0 ADD DUP5 PUSH1 0x40 MLOAD PUSH2 0xC26 SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD DUP2 SLOAD DUP2 LT PUSH2 0xC42 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCD0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCA5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCD0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCB3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP4 PUSH2 0x575 JUMP JUMPDEST PUSH2 0xCE3 PUSH2 0xD19 JUMP JUMPDEST PUSH2 0xCED DUP4 DUP4 PUSH2 0xBEB JUMP JUMPDEST PUSH2 0xD09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH2 0x63E SWAP1 DUP5 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xD92 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xDBF JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xDBF JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xDBF JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xDA4 JUMP JUMPDEST POP PUSH2 0xDCB SWAP3 SWAP2 POP PUSH2 0xE0F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0xDF5 JUMPI POP PUSH2 0x188 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x188 SWAP2 SWAP1 JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xDCB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xE10 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE4B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE61 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE74 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x12FA JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xE8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xECB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xED7 DUP5 DUP3 DUP6 ADD PUSH2 0xE3B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF08 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xF14 DUP7 DUP4 DUP8 ADD PUSH2 0xE3B JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF29 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0xF36 DUP6 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF51 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF68 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xA0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0xF7B JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xF85 PUSH1 0xA0 PUSH2 0x12FA JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xF93 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xF9F DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0xFAF DUP7 PUSH1 0x20 DUP6 ADD PUSH2 0xE24 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xFC5 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xFD1 DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xFE8 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xFF4 DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x100B JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1017 DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1037 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1056 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1321 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0xA0 DUP5 MSTORE PUSH2 0x107F PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x10AA DUP3 DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x60 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x10C4 DUP3 DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x80 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x10DE DUP3 DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x10F9 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1321 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 AND PUSH1 0x0 DUP2 EQ PUSH2 0x1122 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x1139 JUMPI PUSH2 0x1168 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE PUSH1 0x2 DUP4 DIV PUSH1 0x7F AND DUP7 ADD SWAP4 POP PUSH2 0x1168 JUMP JUMPDEST PUSH1 0x2 DUP4 DIV DUP8 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 KECCAK256 DUP8 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1160 JUMPI DUP2 SLOAD DUP11 DUP3 ADD MSTORE SWAP1 DUP6 ADD SWAP1 DUP3 ADD PUSH2 0x1147 JUMP JUMPDEST POP POP POP DUP7 ADD SWAP4 POP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x11C6 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x11B4 DUP6 DUP4 MLOAD PUSH2 0x106A JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1198 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x17D051111151 PUSH1 0xD2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20454D5054595F4E414D450000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20494E56414C49445F494E4445 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0xFB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F4E4F545F464F55 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1391 PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1A2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x106A JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x133C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1324 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x351 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE8 0xE7 MUL JUMP SUB 0xD4 0xF9 0x29 0x2A 0xD0 PUSH4 0x9332A375 PUSH27 0x78662668F35CCBACE63F8090FB18604664736F6C63430007010033 ",
              "sourceMap": "406:1662:43:-:0;;;560:16;;;;;;;;;;406:1662;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100935760003560e01c8063a45f379e11610066578063a45f379e146100fe578063c981ccc314610111578063c9ff4d2514610131578063cc637afe14610146578063e61311171461015957610093565b80631f7b6d321461009857806355304c3f146100b6578063961bf9b1146100cb578063a1298368146100de575b600080fd5b6100a061016c565b6040516100ad91906112f1565b60405180910390f35b6100c96100c4366004610f40565b61017d565b005b6100c96100d9366004610ea4565b61018b565b6100f16100ec366004610edf565b610196565b6040516100ad91906111d3565b6100f161010c366004610ea4565b6101ab565b61012461011f366004611026565b6101b6565b6040516100ad91906112de565b6101396101c9565b6040516100ad9190611173565b6100f1610154366004610ea4565b6101d5565b610124610167366004610ea4565b6101e2565b600061017860006101f5565b905090565b6101886000826101fc565b50565b610188600082610357565b60006101a28383610575565b90505b92915050565b60006101a5826105ce565b6101be610d19565b6101a56000836105e9565b606061017860006108bc565b60006101a5600083610beb565b6101ea610d19565b6101a5600083610cdb565b6001015490565b8051610207816105ce565b1561022d5760405162461bcd60e51b815260040161022490611224565b60405180910390fd5b6102378382610beb565b156102545760405162461bcd60e51b8152600401610224906111de565b60408051808201825283815260018501546020820152905184906102799084906110e7565b908152604051602091819003820190208251805180519293919284926102a3928492910190610d51565b506020828101516001830180546001600160a01b0319166001600160a01b03909216919091179055604083015180516102e29260028501920190610d51565b50606082015180516102fe916003840191602090910190610d51565b506080820151805161031a916004840191602090910190610d51565b5050506020918201516005909101556001808501805491820181556000908152829020835161035193919092019190840190610d51565b50505050565b610360816105ce565b1561037d5760405162461bcd60e51b815260040161022490611224565b6103878282610beb565b6103a35760405162461bcd60e51b81526004016102249061129c565b600082600001826040516103b791906110e7565b9081526040519081900360200190206005015460018401805491925060609160001981019081106103e457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156104725780601f1061044757610100808354040283529160200191610472565b820191906000526020600020905b81548152906001019060200180831161045557829003601f168201915b5050505050905081846000018260405161048c91906110e7565b908152602001604051809103902060050181905550808460010183815481106104b157fe5b9060005260206000200190805190602001906104ce929190610d51565b5060405184906104df9085906110e7565b908152604051908190036020019020600081816104fc8282610dcf565b6001820180546001600160a01b031916905561051c600283016000610dcf565b61052a600383016000610dcf565b610538600483016000610dcf565b5050600582016000905550508360010180548061055157fe5b60019003818190600052602060002001600061056d9190610dcf565b905550505050565b60008160405160200161058891906110e7565b60405160208183030381529060405280519060200120836040516020016105af91906110e7565b6040516020818303038152906040528051906020012014905092915050565b60006101a58260405180602001604052806000815250610575565b6105f1610d19565b600183015482106106145760405162461bcd60e51b81526004016102249061125b565b8260000183600101838154811061062757fe5b9060005260206000200160405161063e9190611103565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a082018481529193909284929184918401828280156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156107835780601f1061075857610100808354040283529160200191610783565b820191906000526020600020905b81548152906001019060200180831161076657829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156108ab5780601f10610880576101008083540402835291602001916108ab565b820191906000526020600020905b81548152906001019060200180831161088e57829003601f168201915b505050505081525050905092915050565b6001810154606090818167ffffffffffffffff811180156108dc57600080fd5b5060405190808252806020026020018201604052801561091657816020015b610903610d19565b8152602001906001900390816108fb5790505b50905060005b82811015610be3578460000185600101828154811061093757fe5b9060005260206000200160405161094e9190611103565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a082018481529193909284929184918401828280156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610b275780601f10610afc57610100808354040283529160200191610b27565b820191906000526020600020905b815481529060010190602001808311610b0a57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b505050505081525050828281518110610bd057fe5b602090810291909101015260010161091c565b509392505050565b6000610bf6826105ce565b158015610c065750600183015415155b80156101a257506101a2836001018460000184604051610c2691906110e7565b90815260200160405180910390206005015481548110610c4257fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610cd05780601f10610ca557610100808354040283529160200191610cd0565b820191906000526020600020905b815481529060010190602001808311610cb357829003601f168201915b505050505083610575565b610ce3610d19565b610ced8383610beb565b610d095760405162461bcd60e51b81526004016102249061129c565b604051839061063e9084906110e7565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d9257805160ff1916838001178555610dbf565b82800160010185558215610dbf579182015b82811115610dbf578251825591602001919060010190610da4565b50610dcb929150610e0f565b5090565b50805460018160011615610100020316600290046000825580601f10610df55750610188565b601f01602090049060005260206000209081019061018891905b5b80821115610dcb5760008155600101610e10565b80356001600160a01b03811681146101a557600080fd5b600082601f830112610e4b578081fd5b813567ffffffffffffffff811115610e61578182fd5b610e74601f8201601f19166020016112fa565b9150808252836020828501011115610e8b57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610eb5578081fd5b813567ffffffffffffffff811115610ecb578182fd5b610ed784828501610e3b565b949350505050565b60008060408385031215610ef1578081fd5b823567ffffffffffffffff80821115610f08578283fd5b610f1486838701610e3b565b93506020850135915080821115610f29578283fd5b50610f3685828601610e3b565b9150509250929050565b600060208284031215610f51578081fd5b813567ffffffffffffffff80821115610f68578283fd5b9083019060a08286031215610f7b578283fd5b610f8560a06112fa565b823582811115610f93578485fd5b610f9f87828601610e3b565b825250610faf8660208501610e24565b6020820152604083013582811115610fc5578485fd5b610fd187828601610e3b565b604083015250606083013582811115610fe8578485fd5b610ff487828601610e3b565b60608301525060808301358281111561100b578485fd5b61101787828601610e3b565b60808301525095945050505050565b600060208284031215611037578081fd5b5035919050565b60008151808452611056816020860160208601611321565b601f01601f19169290920160200192915050565b6000815160a0845261107f60a085018261103e565b905060018060a01b036020840151166020850152604083015184820360408601526110aa828261103e565b915050606083015184820360608601526110c4828261103e565b915050608083015184820360808601526110de828261103e565b95945050505050565b600082516110f9818460208701611321565b9190910192915050565b6000808354600180821660008114611122576001811461113957611168565b60ff198316865260028304607f1686019350611168565b600283048786526020808720875b838110156111605781548a820152908501908201611147565b505050860193505b509195945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156111c657603f198886030184526111b485835161106a565b94509285019290850190600101611198565b5092979650505050505050565b901515815260200190565b60208082526026908201527f4c69624974657261626c654d617070696e673a204e414d455f414c524541445960408201526517d05111115160d21b606082015260800190565b6020808252601e908201527f4c69624974657261626c654d617070696e673a20454d5054595f4e414d450000604082015260600190565b60208082526021908201527f4c69624974657261626c654d617070696e673a20494e56414c49445f494e44456040820152600b60fb1b606082015260800190565b60208082526022908201527f4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f55604082015261139160f21b606082015260800190565b6000602082526101a2602083018461106a565b90815260200190565b60405181810167ffffffffffffffff8111828210171561131957600080fd5b604052919050565b60005b8381101561133c578181015183820152602001611324565b83811115610351575050600091015256fea264697066735822122053e7025603d4f9292ad0639332a3757a78662668f35ccbace63f8090fb18604664736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA45F379E GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA45F379E EQ PUSH2 0xFE JUMPI DUP1 PUSH4 0xC981CCC3 EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0xC9FF4D25 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xCC637AFE EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0xE6131117 EQ PUSH2 0x159 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x1F7B6D32 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x55304C3F EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x961BF9B1 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0xA1298368 EQ PUSH2 0xDE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x16C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x12F1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0xC4 CALLDATASIZE PUSH1 0x4 PUSH2 0xF40 JUMP JUMPDEST PUSH2 0x17D JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC9 PUSH2 0xD9 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x18B JUMP JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xEDF JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x11D3 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x10C CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x124 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x1026 JUMP JUMPDEST PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x139 PUSH2 0x1C9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x1173 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x154 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x1D5 JUMP JUMPDEST PUSH2 0x124 PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0xEA4 JUMP JUMPDEST PUSH2 0x1E2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x178 PUSH1 0x0 PUSH2 0x1F5 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x188 PUSH1 0x0 DUP3 PUSH2 0x1FC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x188 PUSH1 0x0 DUP3 PUSH2 0x357 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A2 DUP4 DUP4 PUSH2 0x575 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A5 DUP3 PUSH2 0x5CE JUMP JUMPDEST PUSH2 0x1BE PUSH2 0xD19 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x0 DUP4 PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x178 PUSH1 0x0 PUSH2 0x8BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A5 PUSH1 0x0 DUP4 PUSH2 0xBEB JUMP JUMPDEST PUSH2 0x1EA PUSH2 0xD19 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x0 DUP4 PUSH2 0xCDB JUMP JUMPDEST PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x207 DUP2 PUSH2 0x5CE JUMP JUMPDEST ISZERO PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x1224 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x237 DUP4 DUP3 PUSH2 0xBEB JUMP JUMPDEST ISZERO PUSH2 0x254 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x1 DUP6 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP1 PUSH2 0x279 SWAP1 DUP5 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 SWAP2 DUP2 SWAP1 SUB DUP3 ADD SWAP1 KECCAK256 DUP3 MLOAD DUP1 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH2 0x2A3 SWAP3 DUP5 SWAP3 SWAP2 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x1 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP1 MLOAD PUSH2 0x2E2 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x2FE SWAP2 PUSH1 0x3 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x31A SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP POP POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE PUSH1 0x1 DUP1 DUP6 ADD DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x351 SWAP4 SWAP2 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP5 ADD SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x360 DUP2 PUSH2 0x5CE JUMP JUMPDEST ISZERO PUSH2 0x37D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x1224 JUMP JUMPDEST PUSH2 0x387 DUP3 DUP3 PUSH2 0xBEB JUMP JUMPDEST PUSH2 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x3B7 SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH1 0x1 DUP5 ADD DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x3E4 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x472 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x447 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x472 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x455 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP2 DUP5 PUSH1 0x0 ADD DUP3 PUSH1 0x40 MLOAD PUSH2 0x48C SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x4B1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x4CE SWAP3 SWAP2 SWAP1 PUSH2 0xD51 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP5 SWAP1 PUSH2 0x4DF SWAP1 DUP6 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x0 DUP2 DUP2 PUSH2 0x4FC DUP3 DUP3 PUSH2 0xDCF JUMP JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x51C PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0xDCF JUMP JUMPDEST PUSH2 0x52A PUSH1 0x3 DUP4 ADD PUSH1 0x0 PUSH2 0xDCF JUMP JUMPDEST PUSH2 0x538 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0xDCF JUMP JUMPDEST POP POP PUSH1 0x5 DUP3 ADD PUSH1 0x0 SWAP1 SSTORE POP POP DUP4 PUSH1 0x1 ADD DUP1 SLOAD DUP1 PUSH2 0x551 JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x56D SWAP2 SWAP1 PUSH2 0xDCF JUMP JUMPDEST SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x588 SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5AF SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A5 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x575 JUMP JUMPDEST PUSH2 0x5F1 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP3 LT PUSH2 0x614 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x125B JUMP JUMPDEST DUP3 PUSH1 0x0 ADD DUP4 PUSH1 0x1 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x627 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0x63E SWAP2 SWAP1 PUSH2 0x1103 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6D9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x6AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6D9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6BC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x783 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x758 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x783 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x766 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x817 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7EC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x817 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x7FA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x8AB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x880 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8AB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x88E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x916 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x903 PUSH2 0xD19 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x8FB JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xBE3 JUMPI DUP5 PUSH1 0x0 ADD DUP6 PUSH1 0x1 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x937 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x1103 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x2 PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV SWAP1 SWAP5 MUL DUP3 ADD PUSH1 0xC0 SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 DUP2 MSTORE SWAP2 SWAP4 SWAP1 SWAP3 DUP5 SWAP3 SWAP2 DUP5 SWAP2 DUP5 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x9E9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9BE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x9E9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x9CC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x1 DUP3 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD DUP4 MSTORE DUP1 DUP6 MSTORE SWAP2 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA93 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA68 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA93 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA76 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xB27 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xAFC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB27 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB0A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xBBB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB90 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBBB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB9E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBD0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x91C JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF6 DUP3 PUSH2 0x5CE JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0xC06 JUMPI POP PUSH1 0x1 DUP4 ADD SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1A2 JUMPI POP PUSH2 0x1A2 DUP4 PUSH1 0x1 ADD DUP5 PUSH1 0x0 ADD DUP5 PUSH1 0x40 MLOAD PUSH2 0xC26 SWAP2 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD DUP2 SLOAD DUP2 LT PUSH2 0xC42 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCD0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCA5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCD0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCB3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP4 PUSH2 0x575 JUMP JUMPDEST PUSH2 0xCE3 PUSH2 0xD19 JUMP JUMPDEST PUSH2 0xCED DUP4 DUP4 PUSH2 0xBEB JUMP JUMPDEST PUSH2 0xD09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH2 0x63E SWAP1 DUP5 SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xD92 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xDBF JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xDBF JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xDBF JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xDA4 JUMP JUMPDEST POP PUSH2 0xDCB SWAP3 SWAP2 POP PUSH2 0xE0F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0xDF5 JUMPI POP PUSH2 0x188 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x188 SWAP2 SWAP1 JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xDCB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xE10 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE4B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE61 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE74 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x12FA JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xE8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xECB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xED7 DUP5 DUP3 DUP6 ADD PUSH2 0xE3B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF08 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xF14 DUP7 DUP4 DUP8 ADD PUSH2 0xE3B JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF29 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0xF36 DUP6 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF51 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF68 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xA0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0xF7B JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xF85 PUSH1 0xA0 PUSH2 0x12FA JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xF93 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xF9F DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0xFAF DUP7 PUSH1 0x20 DUP6 ADD PUSH2 0xE24 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xFC5 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xFD1 DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xFE8 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xFF4 DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x100B JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1017 DUP8 DUP3 DUP7 ADD PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1037 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1056 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1321 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0xA0 DUP5 MSTORE PUSH2 0x107F PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x10AA DUP3 DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x60 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x10C4 DUP3 DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x80 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x10DE DUP3 DUP3 PUSH2 0x103E JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x10F9 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1321 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 AND PUSH1 0x0 DUP2 EQ PUSH2 0x1122 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x1139 JUMPI PUSH2 0x1168 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE PUSH1 0x2 DUP4 DIV PUSH1 0x7F AND DUP7 ADD SWAP4 POP PUSH2 0x1168 JUMP JUMPDEST PUSH1 0x2 DUP4 DIV DUP8 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 KECCAK256 DUP8 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1160 JUMPI DUP2 SLOAD DUP11 DUP3 ADD MSTORE SWAP1 DUP6 ADD SWAP1 DUP3 ADD PUSH2 0x1147 JUMP JUMPDEST POP POP POP DUP7 ADD SWAP4 POP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x11C6 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x11B4 DUP6 DUP4 MLOAD PUSH2 0x106A JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1198 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F414C5245414459 PUSH1 0x40 DUP3 ADD MSTORE PUSH6 0x17D051111151 PUSH1 0xD2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20454D5054595F4E414D450000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A20494E56414C49445F494E4445 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0xFB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624974657261626C654D617070696E673A204E414D455F4E4F545F464F55 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1391 PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1A2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x106A JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x133C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1324 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x351 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE8 0xE7 MUL JUMP SUB 0xD4 0xF9 0x29 0x2A 0xD0 PUSH4 0x9332A375 PUSH27 0x78662668F35CCBACE63F8090FB18604664736F6C63430007010033 ",
              "sourceMap": "406:1662:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1028:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1766:154;;;;;;:::i;:::-;;:::i;:::-;;1926:140;;;;;;:::i;:::-;;:::i;582:170::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;758:126::-;;;;;;:::i;:::-;;:::i;1358:213::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1577:183::-;;;:::i;:::-;;;;;;;:::i;890:132::-;;;;;;:::i;:::-;;:::i;1137:215::-;;;;;;:::i;:::-;;:::i;1028:103::-;1067:7;1093:31;1119:4;1093:25;:31::i;:::-;1086:38;;1028:103;:::o;1766:154::-;1857:56;1898:4;1904:8;1857:40;:56::i;:::-;1766:154;:::o;1926:140::-;2004:55;2048:4;2054;2004:43;:55::i;582:170::-;682:4;709:36;740:1;743;709:30;:36::i;:::-;702:43;;582:170;;;;;:::o;758:126::-;819:4;842:35;875:1;842:32;:35::i;1358:213::-;1456:25;;:::i;:::-;1504:60;1552:4;1558:5;1504:47;:60::i;1577:183::-;1656:27;1706:47;1748:4;1706:41;:47::i;890:132::-;951:4;974:41;1004:4;1010;974:29;:41::i;1137:215::-;1239:25;;:::i;:::-;1287:58;1334:4;1340;1287:46;:58::i;1308:147:35:-;1431:10;;:17;;1308:147::o;2482:509::-;2641:13;;2673:19;2641:13;2673;:19::i;:::-;2672:20;2664:63;;;;-1:-1:-1;;;2664:63:35;;;;;;;:::i;:::-;;;;;;;;;2746:22;2757:4;2763;2746:10;:22::i;:::-;2745:23;2737:74;;;;-1:-1:-1;;;2737:74:35;;;;;;;:::i;:::-;2844:109;;;;;;;;;;;2925:10;;;:17;2844:109;;;;2821:20;;2925:4;;2821:20;;2836:4;;2821:20;:::i;:::-;;;;;;;;;;;;;;;:132;;;;;;:20;;:132;;:20;;:132;;:20;;:132;;;;:::i;:::-;-1:-1:-1;2821:132:35;;;;;;;;;;-1:-1:-1;;;;;;2821:132:35;-1:-1:-1;;;;;2821:132:35;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2821:132:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2821:132:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2821:132:35;;;;;;;;;;2963:10;;;;:21;;;;;;;-1:-1:-1;2963:21:35;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2482:509;;;:::o;2997:543::-;3131:19;3145:4;3131:13;:19::i;:::-;3130:20;3122:63;;;;-1:-1:-1;;;3122:63:35;;;;;;;:::i;:::-;3203:22;3214:4;3220;3203:10;:22::i;:::-;3195:69;;;;-1:-1:-1;;;3195:69:35;;;;;;;:::i;:::-;3274:13;3290:4;:14;;3305:4;3290:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;3351:10;;;3362:17;;3290:26;;-1:-1:-1;3326:22:35;;-1:-1:-1;;3362:21:35;;;3351:33;;;;;;;;;;;;;;;;3326:58;;;;;;;-1:-1:-1;;3326:58:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3351:33;3326:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3427:5;3394:4;:14;;3409:8;3394:24;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;:38;;;;3462:8;3442:4;:10;;3453:5;3442:17;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3487:20:35;;:4;;:20;;3502:4;;3487:20;:::i;:::-;;;;;;;;;;;;;;;;;3480:27;3487:20;;3480:27;:::i;:::-;;;;;;-1:-1:-1;;;;;;3480:27:35;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;3517:4;:10;;:16;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2997:543;;;;:::o;685:200::-;787:4;875:1;858:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;848:30;;;;;;841:1;824:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;814:30;;;;;;:64;807:71;;685:200;;;;:::o;891:111::-;954:4;977:18;989:1;977:18;;;;;;;;;;;;:11;:18::i;1758:302::-;1886:25;;:::i;:::-;1939:10;;;:17;1931:25;;1923:71;;;;-1:-1:-1;;;1923:71:35;;;;;;;:::i;:::-;2011:4;:14;;2026:4;:10;;2037:5;2026:17;;;;;;;;;;;;;;;2011:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2004:49;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2011:33;;;;;;2004:49;2011:33;;2004:49;;2011:33;2004:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2004:49:35;;;-1:-1:-1;;2004:49:35;;;;;-1:-1:-1;;;;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2004:49:35;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2004:49:35;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;-1:-1:-1;;2004:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1758:302;;;;:::o;2066:410::-;2230:10;;;:17;2175:27;;;2230:17;2297:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2257:67;;2339:9;2334:110;2358:1;2354;:5;2334:110;;;2395:4;:14;;2410:4;:10;;2421:1;2410:13;;;;;;;;;;;;;;;2395:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2380:53;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2395:29;;;;;;2380:53;2395:29;;2380:53;;2395:29;2380:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2380:53:35;;;-1:-1:-1;;2380:53:35;;;;;-1:-1:-1;;;;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2380:53:35;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2380:53:35;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;-1:-1:-1;;2380:53:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;2390:1;2380:12;;;;;;;;;;;;;;;;;:53;2361:3;;2334:110;;;-1:-1:-1;2460:9:35;2066:410;-1:-1:-1;;;2066:410:35:o;1008:294::-;1125:4;1165:19;1179:4;1165:13;:19::i;:::-;1164:20;:58;;;;-1:-1:-1;1200:10:35;;;:17;:22;;1164:58;:131;;;;;1238:57;1250:4;:10;;1261:4;:14;;1276:4;1261:20;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;1250:38;;;;;;;;;;;;;;;;;;1238:57;;;;;;;-1:-1:-1;;1238:57:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1250:38;1238:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1290:4;1238:11;:57::i;1461:291::-;1593:25;;:::i;:::-;1638:22;1649:4;1655;1638:10;:22::i;:::-;1630:69;;;;-1:-1:-1;;;1630:69:35;;;;;;;:::i;:::-;1716:20;;:4;;:20;;1731:4;;1716:20;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:130;72:20;;-1:-1;;;;;18818:54;;19558:35;;19548:2;;19607:1;;19597:12;143:440;;244:3;237:4;229:6;225:17;221:27;211:2;;-1:-1;;252:12;211:2;299:6;286:20;16233:18;16225:6;16222:30;16219:2;;;-1:-1;;16255:12;16219:2;321:64;16328:9;16309:17;;-1:-1;;16305:33;16396:4;16386:15;321:64;:::i;:::-;312:73;;405:6;398:5;391:21;509:3;16396:4;500:6;433;491:16;;488:25;485:2;;;526:1;;516:12;485:2;19045:6;16396:4;433:6;429:17;16396:4;467:5;463:16;19022:30;19101:1;19083:16;;;16396:4;19083:16;19076:27;467:5;204:379;-1:-1;;204:379::o;2548:347::-;;2662:2;2650:9;2641:7;2637:23;2633:32;2630:2;;;-1:-1;;2668:12;2630:2;2726:17;2713:31;2764:18;2756:6;2753:30;2750:2;;;-1:-1;;2786:12;2750:2;2816:63;2871:7;2862:6;2851:9;2847:22;2816:63;:::i;:::-;2806:73;2624:271;-1:-1;;;;2624:271::o;2902:578::-;;;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;-1:-1;;3049:12;3011:2;3107:17;3094:31;3145:18;;3137:6;3134:30;3131:2;;;-1:-1;;3167:12;3131:2;3197:63;3252:7;3243:6;3232:9;3228:22;3197:63;:::i;:::-;3187:73;;3325:2;3314:9;3310:18;3297:32;3283:46;;3145:18;3341:6;3338:30;3335:2;;;-1:-1;;3371:12;3335:2;;3401:63;3456:7;3447:6;3436:9;3432:22;3401:63;:::i;:::-;3391:73;;;3005:475;;;;;:::o;3487:399::-;;3627:2;3615:9;3606:7;3602:23;3598:32;3595:2;;;-1:-1;;3633:12;3595:2;3691:17;3678:31;3729:18;;3721:6;3718:30;3715:2;;;-1:-1;;3751:12;3715:2;3838:22;;;;1199:4;1178:19;;;1174:30;1171:2;;;-1:-1;;1207:12;1171:2;1235:20;1199:4;1235:20;:::i;:::-;1318:17;1305:31;3729:18;1348:6;1345:30;1342:2;;;-1:-1;;1378:12;1342:2;1423:59;1478:3;1469:6;1458:9;1454:22;1423:59;:::i;:::-;1405:16;1398:85;;1583:49;1628:3;3627:2;1608:9;1604:22;1583:49;:::i;:::-;3627:2;1569:5;1565:16;1558:75;1731:2;1720:9;1716:18;1703:32;3729:18;1747:6;1744:30;1741:2;;;-1:-1;;1777:12;1741:2;1822:59;1877:3;1868:6;1857:9;1853:22;1822:59;:::i;:::-;1731:2;1808:5;1804:16;1797:85;;1983:2;1972:9;1968:18;1955:32;3729:18;1999:6;1996:30;1993:2;;;-1:-1;;2029:12;1993:2;2074:59;2129:3;2120:6;2109:9;2105:22;2074:59;:::i;:::-;1983:2;2060:5;2056:16;2049:85;;2232:3;2221:9;2217:19;2204:33;3729:18;2249:6;2246:30;2243:2;;;-1:-1;;2279:12;2243:2;2324:58;2378:3;2369:6;2358:9;2354:22;2324:58;:::i;:::-;2232:3;2306:16;;2299:84;-1:-1;2310:5;3589:297;-1:-1;;;;;3589:297::o;3893:241::-;;3997:2;3985:9;3976:7;3972:23;3968:32;3965:2;;;-1:-1;;4003:12;3965:2;-1:-1;2478:20;;3959:175;-1:-1;3959:175::o;5879:323::-;;6011:5;17245:12;17861:6;17856:3;17849:19;6094:52;6139:6;17898:4;17893:3;17889:14;17898:4;6120:5;6116:16;6094:52;:::i;:::-;16328:9;19462:14;-1:-1;;19458:28;6158:39;;;;17898:4;6158:39;;5959:243;-1:-1;;5959:243::o;9370:1307::-;;9605:16;9599:23;9533:4;9642:14;9635:38;9688:73;9533:4;9528:3;9524:14;9742:12;9688:73;:::i;:::-;9680:81;;18829:42;;;;;9852:4;9845:5;9841:16;9835:23;18818:54;9852:4;9916:3;9912:14;4508:37;10015:4;10008:5;10004:16;9998:23;10067:3;10061:4;10057:14;10015:4;10045:3;10041:14;10034:38;10087:73;10155:4;10141:12;10087:73;:::i;:::-;10079:81;;;10257:4;10250:5;10246:16;10240:23;10309:3;10303:4;10299:14;10257:4;10287:3;10283:14;10276:38;10329:73;10397:4;10383:12;10329:73;:::i;:::-;10321:81;;;10496:4;10489:5;10485:16;10479:23;10548:3;10542:4;10538:14;10496:4;10526:3;10522:14;10515:38;10568:71;10634:4;10620:12;10568:71;:::i;:::-;10661:11;9506:1171;-1:-1;;;;;9506:1171::o;12189:275::-;;6706:5;17245:12;6818:52;6863:6;6858:3;6851:4;6844:5;6840:16;6818:52;:::i;:::-;6882:16;;;;;12325:139;-1:-1;;12325:139::o;12471:269::-;;-1:-1;7072:5;7066:12;7106:1;;7095:9;7091:17;7119:1;7114:268;;;;7393:1;7388:425;;;;7084:729;;7114:268;-1:-1;;7319:25;;7307:38;;7188:1;7173:17;;7192:4;7169:28;7359:16;;;-1:-1;7114:268;;7388:425;7457:1;7446:9;7442:17;17046:3;-1:-1;17036:14;17078:4;;-1:-1;17065:18;-1:-1;7646:130;7660:6;7657:1;7654:13;7646:130;;;7719:14;;7706:11;;;7699:35;7753:15;;;;7675:12;;7646:130;;;-1:-1;;;7790:16;;;-1:-1;7084:729;-1:-1;12725:10;;12604:136;-1:-1;;;;;12604:136::o;12747:514::-;;12996:2;;12985:9;12981:18;12996:2;13017:17;13010:47;13071:180;4925:5;17245:12;17861:6;17856:3;17849:19;17889:14;12985:9;17889:14;4937:129;;17889:14;12996:2;5123:6;5119:17;12985:9;5110:27;;5098:39;;12996:2;5244:5;16898:14;-1:-1;5283:438;5308:6;5305:1;5302:13;5283:438;;;5360:20;;12985:9;5364:4;5360:20;;5355:3;5348:33;4315:118;4429:3;5415:6;5409:13;4315:118;:::i;:::-;5429:144;-1:-1;5700:14;;;;17668;;;;5330:1;5323:9;5283:438;;;-1:-1;13063:188;;12967:294;-1:-1;;;;;;;12967:294::o;13268:210::-;18730:13;;18723:21;5833:34;;13389:2;13374:18;;13360:118::o;13485:416::-;13685:2;13699:47;;;8052:2;13670:18;;;17849:19;8088:34;17889:14;;;8068:55;-1:-1;;;8143:12;;;8136:30;8185:12;;;13656:245::o;13908:416::-;14108:2;14122:47;;;8436:2;14093:18;;;17849:19;8472:32;17889:14;;;8452:53;8524:12;;;14079:245::o;14331:416::-;14531:2;14545:47;;;8775:2;14516:18;;;17849:19;8811:34;17889:14;;;8791:55;-1:-1;;;8866:12;;;8859:25;8903:12;;;14502:245::o;14754:416::-;14954:2;14968:47;;;9154:2;14939:18;;;17849:19;9190:34;17889:14;;;9170:55;-1:-1;;;9245:12;;;9238:26;9283:12;;;14925:245::o;15177:414::-;;15376:2;15397:17;15390:47;15451:130;15376:2;15365:9;15361:18;15567:6;15451:130;:::i;15598:222::-;12140:37;;;15725:2;15710:18;;15696:124::o;15827:256::-;15889:2;15883:9;15915:17;;;15990:18;15975:34;;16011:22;;;15972:62;15969:2;;;16047:1;;16037:12;15969:2;15889;16056:22;15867:216;;-1:-1;15867:216::o;19118:268::-;19183:1;19190:101;19204:6;19201:1;19198:13;19190:101;;;19271:11;;;19265:18;19252:11;;;19245:39;19226:2;19219:10;19190:101;;;19306:6;19303:1;19300:13;19297:2;;;-1:-1;;19183:1;19353:16;;19346:27;19167:219::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "999000",
                "executionCost": "1041",
                "totalCost": "1000041"
              },
              "external": {
                "addTransferDefinition((string,address,string,string,bytes))": "infinite",
                "getTransferDefinitionByIndex(uint256)": "infinite",
                "getTransferDefinitionByName(string)": "infinite",
                "getTransferDefinitions()": "infinite",
                "isEmptyString(string)": "infinite",
                "length()": "1070",
                "nameExists(string)": "infinite",
                "removeTransferDefinition(string)": "infinite",
                "stringEqual(string,string)": "infinite"
              }
            },
            "methodIdentifiers": {
              "addTransferDefinition((string,address,string,string,bytes))": "55304c3f",
              "getTransferDefinitionByIndex(uint256)": "c981ccc3",
              "getTransferDefinitionByName(string)": "e6131117",
              "getTransferDefinitions()": "c9ff4d25",
              "isEmptyString(string)": "a45f379e",
              "length()": "1f7b6d32",
              "nameExists(string)": "cc637afe",
              "removeTransferDefinition(string)": "961bf9b1",
              "stringEqual(string,string)": "a1298368"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"addTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getTransferDefinitionByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getTransferDefinitionByName\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransferDefinitions\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"s\",\"type\":\"string\"}],\"name\":\"isEmptyString\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"length\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"nameExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"removeTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"s\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"t\",\"type\":\"string\"}],\"name\":\"stringEqual\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Layne Haber <layne@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"TestLibIterableMapping\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Used to easily test the internal methods of         LibIterableMapping.sol by aliasing them to public         methods.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/TestLibIterableMapping.sol\":\"TestLibIterableMapping\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibIterableMapping.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title LibIterableMapping\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides an efficient way to store and retrieve\\n///         RegisteredTransfers. This contract is used to manage the transfers\\n///         stored by `TransferRegistry.sol`\\nlibrary LibIterableMapping {\\n    struct TransferDefinitionWithIndex {\\n        RegisteredTransfer transfer;\\n        uint256 index;\\n    }\\n\\n    struct IterableMapping {\\n        mapping(string => TransferDefinitionWithIndex) transfers;\\n        string[] names;\\n    }\\n\\n    function stringEqual(string memory s, string memory t)\\n        internal\\n        pure\\n        returns (bool)\\n    {\\n        return keccak256(abi.encodePacked(s)) == keccak256(abi.encodePacked(t));\\n    }\\n\\n    function isEmptyString(string memory s) internal pure returns (bool) {\\n        return stringEqual(s, \\\"\\\");\\n    }\\n\\n    function nameExists(IterableMapping storage self, string memory name)\\n        internal\\n        view\\n        returns (bool)\\n    {\\n        return\\n            !isEmptyString(name) &&\\n            self.names.length != 0 &&\\n            stringEqual(self.names[self.transfers[name].index], name);\\n    }\\n\\n    function length(IterableMapping storage self)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return self.names.length;\\n    }\\n\\n    function getTransferDefinitionByName(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        return self.transfers[name].transfer;\\n    }\\n\\n    function getTransferDefinitionByIndex(\\n        IterableMapping storage self,\\n        uint256 index\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(index < self.names.length, \\\"LibIterableMapping: INVALID_INDEX\\\");\\n        return self.transfers[self.names[index]].transfer;\\n    }\\n\\n    function getTransferDefinitions(IterableMapping storage self)\\n        internal\\n        view\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        uint256 l = self.names.length;\\n        RegisteredTransfer[] memory transfers = new RegisteredTransfer[](l);\\n        for (uint256 i = 0; i < l; i++) {\\n            transfers[i] = self.transfers[self.names[i]].transfer;\\n        }\\n        return transfers;\\n    }\\n\\n    function addTransferDefinition(\\n        IterableMapping storage self,\\n        RegisteredTransfer memory transfer\\n    ) internal {\\n        string memory name = transfer.name;\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(!nameExists(self, name), \\\"LibIterableMapping: NAME_ALREADY_ADDED\\\");\\n        self.transfers[name] = TransferDefinitionWithIndex({\\n            transfer: transfer,\\n            index: self.names.length\\n        });\\n        self.names.push(name);\\n    }\\n\\n    function removeTransferDefinition(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal {\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        uint256 index = self.transfers[name].index;\\n        string memory lastName = self.names[self.names.length - 1];\\n        self.transfers[lastName].index = index;\\n        self.names[index] = lastName;\\n        delete self.transfers[name];\\n        self.names.pop();\\n    }\\n}\\n\",\"keccak256\":\"0x52d4a240bb76e9892af1ecbf6cf72995890db0b115a36a54e1b0115f0f47ce8a\",\"license\":\"UNLICENSED\"},\"src.sol/testing/TestLibIterableMapping.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\nimport \\\"../lib/LibIterableMapping.sol\\\";\\n\\n/// @title TestLibIterableMapping\\n/// @author Layne Haber <layne@connext.network>\\n/// @notice Used to easily test the internal methods of\\n///         LibIterableMapping.sol by aliasing them to public\\n///         methods.\\ncontract TestLibIterableMapping {\\n    using LibIterableMapping for LibIterableMapping.IterableMapping;\\n\\n    LibIterableMapping.IterableMapping data;\\n\\n    constructor() {}\\n\\n    function stringEqual(string memory s, string memory t)\\n        public\\n        pure\\n        returns (bool)\\n    {\\n        return LibIterableMapping.stringEqual(s, t);\\n    }\\n\\n    function isEmptyString(string memory s) public pure returns (bool) {\\n        return LibIterableMapping.isEmptyString(s);\\n    }\\n\\n    function nameExists(string memory name) public view returns (bool) {\\n        return LibIterableMapping.nameExists(data, name);\\n    }\\n\\n    function length() public view returns (uint256) {\\n        return LibIterableMapping.length(data);\\n    }\\n\\n    function getTransferDefinitionByName(string memory name)\\n        public\\n        view\\n        returns (RegisteredTransfer memory)\\n    {\\n        return LibIterableMapping.getTransferDefinitionByName(data, name);\\n    }\\n\\n    function getTransferDefinitionByIndex(uint256 index)\\n        public\\n        view\\n        returns (RegisteredTransfer memory)\\n    {\\n        return LibIterableMapping.getTransferDefinitionByIndex(data, index);\\n    }\\n\\n    function getTransferDefinitions()\\n        public\\n        view\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        return LibIterableMapping.getTransferDefinitions(data);\\n    }\\n\\n    function addTransferDefinition(RegisteredTransfer memory transfer) public {\\n        return LibIterableMapping.addTransferDefinition(data, transfer);\\n    }\\n\\n    function removeTransferDefinition(string memory name) public {\\n        return LibIterableMapping.removeTransferDefinition(data, name);\\n    }\\n}\\n\",\"keccak256\":\"0xdc394ebee50c00492b9f0e040681ad5e2297c922f68bf4d060d2fa54eedcfb09\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5675,
                "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                "label": "data",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(IterableMapping)4424_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_string_storage)dyn_storage": {
                "base": "t_string_storage",
                "encoding": "dynamic_array",
                "label": "string[]",
                "numberOfBytes": "32"
              },
              "t_bytes_storage": {
                "encoding": "bytes",
                "label": "bytes",
                "numberOfBytes": "32"
              },
              "t_mapping(t_string_memory_ptr,t_struct(TransferDefinitionWithIndex)4416_storage)": {
                "encoding": "mapping",
                "key": "t_string_memory_ptr",
                "label": "mapping(string => struct LibIterableMapping.TransferDefinitionWithIndex)",
                "numberOfBytes": "32",
                "value": "t_struct(TransferDefinitionWithIndex)4416_storage"
              },
              "t_string_memory_ptr": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_struct(IterableMapping)4424_storage": {
                "encoding": "inplace",
                "label": "struct LibIterableMapping.IterableMapping",
                "members": [
                  {
                    "astId": 4420,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "transfers",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_mapping(t_string_memory_ptr,t_struct(TransferDefinitionWithIndex)4416_storage)"
                  },
                  {
                    "astId": 4423,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "names",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_array(t_string_storage)dyn_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(RegisteredTransfer)3967_storage": {
                "encoding": "inplace",
                "label": "struct RegisteredTransfer",
                "members": [
                  {
                    "astId": 3958,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "name",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 3960,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "definition",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_address"
                  },
                  {
                    "astId": 3962,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "stateEncoding",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 3964,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "resolverEncoding",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 3966,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "encodedCancel",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_bytes_storage"
                  }
                ],
                "numberOfBytes": "160"
              },
              "t_struct(TransferDefinitionWithIndex)4416_storage": {
                "encoding": "inplace",
                "label": "struct LibIterableMapping.TransferDefinitionWithIndex",
                "members": [
                  {
                    "astId": 4413,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "transfer",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(RegisteredTransfer)3967_storage"
                  },
                  {
                    "astId": 4415,
                    "contract": "src.sol/testing/TestLibIterableMapping.sol:TestLibIterableMapping",
                    "label": "index",
                    "offset": 0,
                    "slot": "5",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "192"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Used to easily test the internal methods of         LibIterableMapping.sol by aliasing them to public         methods.",
            "version": 1
          }
        }
      },
      "src.sol/testing/TestToken.sol": {
        "TestToken": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b50604080518082018252600a8152692a32b9ba102a37b5b2b760b11b602080830191825283518085019094526004845263151154d560e21b908401528151919291620000609160039162000218565b5080516200007690600490602084019062000218565b50506005805460ff19166012179055506200009c3369d3c21bcecceda1000000620000a2565b620002b4565b6001600160a01b038216620000fe576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200010c60008383620001b1565b6200012881600254620001b660201b6200060b1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200015b9183906200060b620001b6821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000211576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025b57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028b5782518255916020019190600101906200026e565b50620002999291506200029d565b5090565b5b808211156200029957600081556001016200029e565b610cfb80620002c46000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac14610287578063a457c2d7146102b3578063a9059cbb146102df578063dd62ed3e1461030b576100cf565b806340c10f191461022b57806370a082311461025957806395d89b411461027f576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab578063313ce567146101e157806339509351146101ff575b600080fd5b6100dc610339565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b0381351690602001356103cf565b604080519115158252519081900360200190f35b6101996103ec565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b038135811691602081013590911690604001356103f2565b6101e9610479565b6040805160ff9092168252519081900360200190f35b61017d6004803603604081101561021557600080fd5b506001600160a01b038135169060200135610482565b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356104d0565b005b6101996004803603602081101561026f57600080fd5b50356001600160a01b03166104de565b6100dc6104f9565b6102576004803603604081101561029d57600080fd5b506001600160a01b03813516906020013561055a565b61017d600480360360408110156102c957600080fd5b506001600160a01b038135169060200135610564565b61017d600480360360408110156102f557600080fd5b506001600160a01b0381351690602001356105cc565b6101996004803603604081101561032157600080fd5b506001600160a01b03813581169160200135166105e0565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b820191906000526020600020905b8154815290600101906020018083116103a857829003601f168201915b5050505050905090565b60006103e36103dc61066c565b8484610670565b50600192915050565b60025490565b60006103ff84848461075c565b61046f8461040b61066c565b61046a85604051806060016040528060288152602001610c0f602891396001600160a01b038a1660009081526001602052604081209061044961066c565b6001600160a01b0316815260208101919091526040016000205491906108b7565b610670565b5060019392505050565b60055460ff1690565b60006103e361048f61066c565b8461046a85600160006104a061066c565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061060b565b6104da828261094e565b5050565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b6104da8282610a3e565b60006103e361057161066c565b8461046a85604051806060016040528060258152602001610ca1602591396001600061059b61066c565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906108b7565b60006103e36105d961066c565b848461075c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610665576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166106b55760405162461bcd60e51b8152600401808060200182810382526024815260200180610c7d6024913960400191505060405180910390fd5b6001600160a01b0382166106fa5760405162461bcd60e51b8152600401808060200182810382526022815260200180610bc76022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107a15760405162461bcd60e51b8152600401808060200182810382526025815260200180610c586025913960400191505060405180910390fd5b6001600160a01b0382166107e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610b826023913960400191505060405180910390fd5b6107f1838383610b3a565b61082e81604051806060016040528060268152602001610be9602691396001600160a01b03861660009081526020819052604090205491906108b7565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461085d908261060b565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156109465760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561090b5781810151838201526020016108f3565b50505050905090810190601f1680156109385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0382166109a9576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109b560008383610b3a565b6002546109c2908261060b565b6002556001600160a01b0382166000908152602081905260409020546109e8908261060b565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610a835760405162461bcd60e51b8152600401808060200182810382526021815260200180610c376021913960400191505060405180910390fd5b610a8f82600083610b3a565b610acc81604051806060016040528060228152602001610ba5602291396001600160a01b03851660009081526020819052604090205491906108b7565b6001600160a01b038316600090815260208190526040902055600254610af29082610b3f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b600061066583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506108b756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab9dcafdcf3d12155ca9697d505d71261c7afcb9c777a043bc5bb39f7a2d72ab64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xA DUP2 MSTORE PUSH10 0x2A32B9BA102A37B5B2B7 PUSH1 0xB1 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE PUSH1 0x4 DUP5 MSTORE PUSH4 0x151154D5 PUSH1 0xE2 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH3 0x60 SWAP2 PUSH1 0x3 SWAP2 PUSH3 0x218 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x76 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x218 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH3 0x9C CALLER PUSH10 0xD3C21BCECCEDA1000000 PUSH3 0xA2 JUMP JUMPDEST PUSH3 0x2B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xFE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH3 0x10C PUSH1 0x0 DUP4 DUP4 PUSH3 0x1B1 JUMP JUMPDEST PUSH3 0x128 DUP2 PUSH1 0x2 SLOAD PUSH3 0x1B6 PUSH1 0x20 SHL PUSH3 0x60B OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH3 0x15B SWAP2 DUP4 SWAP1 PUSH3 0x60B PUSH3 0x1B6 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH3 0x211 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x25B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x28B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x28B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x28B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x26E JUMP JUMPDEST POP PUSH3 0x299 SWAP3 SWAP2 POP PUSH3 0x29D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x299 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x29E JUMP JUMPDEST PUSH2 0xCFB DUP1 PUSH3 0x2C4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x9DC29FAC GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30B JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x479 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x482 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4DE JUMP JUMPDEST PUSH2 0xDC PUSH2 0x4F9 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x55A JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x564 JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5E0 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x3DC PUSH2 0x66C JUMP JUMPDEST DUP5 DUP5 PUSH2 0x670 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF DUP5 DUP5 DUP5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x46F DUP5 PUSH2 0x40B PUSH2 0x66C JUMP JUMPDEST PUSH2 0x46A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC0F PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x449 PUSH2 0x66C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x48F PUSH2 0x66C JUMP JUMPDEST DUP5 PUSH2 0x46A DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x4A0 PUSH2 0x66C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH2 0x4DA DUP3 DUP3 PUSH2 0x94E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x4DA DUP3 DUP3 PUSH2 0xA3E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x571 PUSH2 0x66C JUMP JUMPDEST DUP5 PUSH2 0x46A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCA1 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x59B PUSH2 0x66C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x5D9 PUSH2 0x66C JUMP JUMPDEST DUP5 DUP5 PUSH2 0x75C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x665 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC7D PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xBC7 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x7A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC58 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB82 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7F1 DUP4 DUP4 DUP4 PUSH2 0xB3A JUMP JUMPDEST PUSH2 0x82E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBE9 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x85D SWAP1 DUP3 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x946 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x90B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x938 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9B5 PUSH1 0x0 DUP4 DUP4 PUSH2 0xB3A JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x9C2 SWAP1 DUP3 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9E8 SWAP1 DUP3 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA83 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC37 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA8F DUP3 PUSH1 0x0 DUP4 PUSH2 0xB3A JUMP JUMPDEST PUSH2 0xACC DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBA5 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0xAF2 SWAP1 DUP3 PUSH2 0xB3F JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x665 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x8B7 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20627572 PUSH15 0x2066726F6D20746865207A65726F20 PUSH2 0x6464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220AB9D 0xCA REVERT 0xCF RETURNDATASIZE SLT ISZERO 0x5C 0xA9 PUSH10 0x7D505D71261C7AFCB9C7 PUSH24 0xA043BC5BB39F7A2D72AB64736F6C63430007010033000000 ",
              "sourceMap": "249:329:44:-:0;;;283:91;;;;;;;;;-1:-1:-1;2013:134:6;;;;;;;;;;;-1:-1:-1;;;2013:134:6;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2013:134:6;;;;2078:12;;2013:134;;;2078:12;;:5;;:12;:::i;:::-;-1:-1:-1;2100:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2126:9:6;:14;;-1:-1:-1;;2126:14:6;2138:2;2126:14;;;-1:-1:-1;335:32:44::1;341:10;353:13;335:5;:32::i;:::-;249:329:::0;;7828:370:6;-1:-1:-1;;;;;7911:21:6;;7903:65;;;;;-1:-1:-1;;;7903:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7979:49;8008:1;8012:7;8021:6;7979:20;:49::i;:::-;8054:24;8071:6;8054:12;;:16;;;;;;:24;;;;:::i;:::-;8039:12;:39;-1:-1:-1;;;;;8109:18:6;;:9;:18;;;;;;;;;;;;:30;;8132:6;;8109:22;;;;;:30;;:::i;:::-;-1:-1:-1;;;;;8088:18:6;;:9;:18;;;;;;;;;;;:51;;;;8154:37;;;;;;;8088:18;;:9;;8154:37;;;;;;;;;;7828:370;;:::o;10688:92::-;;;;:::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;249:329:44:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;249:329:44;;;-1:-1:-1;249:329:44;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac14610287578063a457c2d7146102b3578063a9059cbb146102df578063dd62ed3e1461030b576100cf565b806340c10f191461022b57806370a082311461025957806395d89b411461027f576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab578063313ce567146101e157806339509351146101ff575b600080fd5b6100dc610339565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b0381351690602001356103cf565b604080519115158252519081900360200190f35b6101996103ec565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b038135811691602081013590911690604001356103f2565b6101e9610479565b6040805160ff9092168252519081900360200190f35b61017d6004803603604081101561021557600080fd5b506001600160a01b038135169060200135610482565b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356104d0565b005b6101996004803603602081101561026f57600080fd5b50356001600160a01b03166104de565b6100dc6104f9565b6102576004803603604081101561029d57600080fd5b506001600160a01b03813516906020013561055a565b61017d600480360360408110156102c957600080fd5b506001600160a01b038135169060200135610564565b61017d600480360360408110156102f557600080fd5b506001600160a01b0381351690602001356105cc565b6101996004803603604081101561032157600080fd5b506001600160a01b03813581169160200135166105e0565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b820191906000526020600020905b8154815290600101906020018083116103a857829003601f168201915b5050505050905090565b60006103e36103dc61066c565b8484610670565b50600192915050565b60025490565b60006103ff84848461075c565b61046f8461040b61066c565b61046a85604051806060016040528060288152602001610c0f602891396001600160a01b038a1660009081526001602052604081209061044961066c565b6001600160a01b0316815260208101919091526040016000205491906108b7565b610670565b5060019392505050565b60055460ff1690565b60006103e361048f61066c565b8461046a85600160006104a061066c565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061060b565b6104da828261094e565b5050565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103c55780601f1061039a576101008083540402835291602001916103c5565b6104da8282610a3e565b60006103e361057161066c565b8461046a85604051806060016040528060258152602001610ca1602591396001600061059b61066c565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906108b7565b60006103e36105d961066c565b848461075c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610665576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166106b55760405162461bcd60e51b8152600401808060200182810382526024815260200180610c7d6024913960400191505060405180910390fd5b6001600160a01b0382166106fa5760405162461bcd60e51b8152600401808060200182810382526022815260200180610bc76022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166107a15760405162461bcd60e51b8152600401808060200182810382526025815260200180610c586025913960400191505060405180910390fd5b6001600160a01b0382166107e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610b826023913960400191505060405180910390fd5b6107f1838383610b3a565b61082e81604051806060016040528060268152602001610be9602691396001600160a01b03861660009081526020819052604090205491906108b7565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461085d908261060b565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156109465760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561090b5781810151838201526020016108f3565b50505050905090810190601f1680156109385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0382166109a9576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6109b560008383610b3a565b6002546109c2908261060b565b6002556001600160a01b0382166000908152602081905260409020546109e8908261060b565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610a835760405162461bcd60e51b8152600401808060200182810382526021815260200180610c376021913960400191505060405180910390fd5b610a8f82600083610b3a565b610acc81604051806060016040528060228152602001610ba5602291396001600160a01b03851660009081526020819052604090205491906108b7565b6001600160a01b038316600090815260208190526040902055600254610af29082610b3f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b600061066583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506108b756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab9dcafdcf3d12155ca9697d505d71261c7afcb9c777a043bc5bb39f7a2d72ab64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x9DC29FAC GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30B JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x479 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x482 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4DE JUMP JUMPDEST PUSH2 0xDC PUSH2 0x4F9 JUMP JUMPDEST PUSH2 0x257 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x55A JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x564 JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5E0 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x3DC PUSH2 0x66C JUMP JUMPDEST DUP5 DUP5 PUSH2 0x670 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF DUP5 DUP5 DUP5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x46F DUP5 PUSH2 0x40B PUSH2 0x66C JUMP JUMPDEST PUSH2 0x46A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC0F PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x449 PUSH2 0x66C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x48F PUSH2 0x66C JUMP JUMPDEST DUP5 PUSH2 0x46A DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x4A0 PUSH2 0x66C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH2 0x4DA DUP3 DUP3 PUSH2 0x94E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x39A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x4DA DUP3 DUP3 PUSH2 0xA3E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x571 PUSH2 0x66C JUMP JUMPDEST DUP5 PUSH2 0x46A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCA1 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x59B PUSH2 0x66C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E3 PUSH2 0x5D9 PUSH2 0x66C JUMP JUMPDEST DUP5 DUP5 PUSH2 0x75C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x665 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC7D PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xBC7 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x7A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC58 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB82 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7F1 DUP4 DUP4 DUP4 PUSH2 0xB3A JUMP JUMPDEST PUSH2 0x82E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBE9 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x85D SWAP1 DUP3 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x946 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x90B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x938 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x9A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9B5 PUSH1 0x0 DUP4 DUP4 PUSH2 0xB3A JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x9C2 SWAP1 DUP3 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9E8 SWAP1 DUP3 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA83 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC37 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA8F DUP3 PUSH1 0x0 DUP4 PUSH2 0xB3A JUMP JUMPDEST PUSH2 0xACC DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBA5 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0xAF2 SWAP1 DUP3 PUSH2 0xB3F JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x665 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x8B7 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20627572 PUSH15 0x2066726F6D20746865207A65726F20 PUSH2 0x6464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220AB9D 0xCA REVERT 0xCF RETURNDATASIZE SLT ISZERO 0x5C 0xA9 PUSH10 0x7D505D71261C7AFCB9C7 PUSH24 0xA043BC5BB39F7A2D72AB64736F6C63430007010033000000 ",
              "sourceMap": "249:329:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4248:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4248:166:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3255:98;;;:::i;:::-;;;;;;;;;;;;;;;;4874:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4874:317:6;;;;;;;;;;;;;;;;;:::i;3114:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5586:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5586:215:6;;;;;;;;:::i;380:95:44:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;380:95:44;;;;;;;;:::i;:::-;;3411:117:6;;;;;;;;;;;;;;;;-1:-1:-1;3411:117:6;-1:-1:-1;;;;;3411:117:6;;:::i;2406:85::-;;;:::i;481:95:44:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;481:95:44;;;;;;;;:::i;6288:266:6:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6288:266:6;;;;;;;;:::i;3731:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3731:172:6;;;;;;;;:::i;3961:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3961:149:6;;;;;;;;;;:::i;2212:81::-;2281:5;2274:12;;;;;;;;-1:-1:-1;;2274:12:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2249:13;;2274:12;;2281:5;;2274:12;;2281:5;2274:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:81;:::o;4248:166::-;4331:4;4347:39;4356:12;:10;:12::i;:::-;4370:7;4379:6;4347:8;:39::i;:::-;-1:-1:-1;4403:4:6;4248:166;;;;:::o;3255:98::-;3334:12;;3255:98;:::o;4874:317::-;4980:4;4996:36;5006:6;5014:9;5025:6;4996:9;:36::i;:::-;5042:121;5051:6;5059:12;:10;:12::i;:::-;5073:89;5111:6;5073:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5073:19:6;;;;;;:11;:19;;;;;;5093:12;:10;:12::i;:::-;-1:-1:-1;;;;;5073:33:6;;;;;;;;;;;;-1:-1:-1;5073:33:6;;;:89;:37;:89::i;:::-;5042:8;:121::i;:::-;-1:-1:-1;5180:4:6;4874:317;;;;;:::o;3114:81::-;3179:9;;;;3114:81;:::o;5586:215::-;5674:4;5690:83;5699:12;:10;:12::i;:::-;5713:7;5722:50;5761:10;5722:11;:25;5734:12;:10;:12::i;:::-;-1:-1:-1;;;;;5722:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;5722:25:6;;;:34;;;;;;;;;;;:38;:50::i;380:95:44:-;446:22;452:7;461:6;446:5;:22::i;:::-;380:95;;:::o;3411:117:6:-;-1:-1:-1;;;;;3503:18:6;3477:7;3503:18;;;;;;;;;;;;3411:117::o;2406:85::-;2477:7;2470:14;;;;;;;;-1:-1:-1;;2470:14:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2445:13;;2470:14;;2477:7;;2470:14;;2477:7;2470:14;;;;;;;;;;;;;;;;;;;;;;;;481:95:44;547:22;553:7;562:6;547:5;:22::i;6288:266:6:-;6381:4;6397:129;6406:12;:10;:12::i;:::-;6420:7;6429:96;6468:15;6429:96;;;;;;;;;;;;;;;;;:11;:25;6441:12;:10;:12::i;:::-;-1:-1:-1;;;;;6429:25:6;;;;;;;;;;;;;;;;;-1:-1:-1;6429:25:6;;;:34;;;;;;;;;;;:96;:38;:96::i;3731:172::-;3817:4;3833:42;3843:12;:10;:12::i;:::-;3857:9;3868:6;3833:9;:42::i;3961:149::-;-1:-1:-1;;;;;4076:18:6;;;4050:7;4076:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3961:149::o;874:176:5:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:5:o;590:104:0:-;677:10;590:104;:::o;9350:340:6:-;-1:-1:-1;;;;;9451:19:6;;9443:68;;;;-1:-1:-1;;;9443:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9529:21:6;;9521:68;;;;-1:-1:-1;;;9521:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9600:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9651:32;;;;;;;;;;;;;;;;;9350:340;;;:::o;7028:530::-;-1:-1:-1;;;;;7133:20:6;;7125:70;;;;-1:-1:-1;;;7125:70:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7213:23:6;;7205:71;;;;-1:-1:-1;;;7205:71:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7287:47;7308:6;7316:9;7327:6;7287:20;:47::i;:::-;7365:71;7387:6;7365:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7365:17:6;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7345:17:6;;;:9;:17;;;;;;;;;;;:91;;;;7469:20;;;;;;;:32;;7494:6;7469:24;:32::i;:::-;-1:-1:-1;;;;;7446:20:6;;;:9;:20;;;;;;;;;;;;:55;;;;7516:35;;;;;;;7446:20;;7516:35;;;;;;;;;;;;;7028:530;;;:::o;1746:187:5:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:5;;;1746:187::o;7828:370:6:-;-1:-1:-1;;;;;7911:21:6;;7903:65;;;;;-1:-1:-1;;;7903:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7979:49;8008:1;8012:7;8021:6;7979:20;:49::i;:::-;8054:12;;:24;;8071:6;8054:16;:24::i;:::-;8039:12;:39;-1:-1:-1;;;;;8109:18:6;;:9;:18;;;;;;;;;;;:30;;8132:6;8109:22;:30::i;:::-;-1:-1:-1;;;;;8088:18:6;;:9;:18;;;;;;;;;;;:51;;;;8154:37;;;;;;;8088:18;;:9;;8154:37;;;;;;;;;;7828:370;;:::o;8517:410::-;-1:-1:-1;;;;;8600:21:6;;8592:67;;;;-1:-1:-1;;;8592:67:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8670:49;8691:7;8708:1;8712:6;8670:20;:49::i;:::-;8751:68;8774:6;8751:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8751:18:6;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;8730:18:6;;:9;:18;;;;;;;;;;:89;8844:12;;:24;;8861:6;8844:16;:24::i;:::-;8829:12;:39;8883:37;;;;;;;;8909:1;;-1:-1:-1;;;;;8883:37:6;;;;;;;;;;;;8517:410;;:::o;10688:92::-;;;;:::o;1321:134:5:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "664600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "1338",
                "approve(address,uint256)": "infinite",
                "balanceOf(address)": "1190",
                "burn(address,uint256)": "infinite",
                "decimals()": "1102",
                "decreaseAllowance(address,uint256)": "infinite",
                "increaseAllowance(address,uint256)": "infinite",
                "mint(address,uint256)": "infinite",
                "name()": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "1043",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(address,uint256)": "9dc29fac",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "mint(address,uint256)": "40c10f19",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/testing/TestToken.sol\":\"TestToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     *\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     *\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../../GSN/Context.sol\\\";\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20 {\\n    using SafeMath for uint256;\\n    using Address for address;\\n\\n    mapping (address => uint256) private _balances;\\n\\n    mapping (address => mapping (address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n    uint8 private _decimals;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\\n     * a default value of 18.\\n     *\\n     * To select a different value for {decimals}, use {_setupDecimals}.\\n     *\\n     * All three of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor (string memory name, string memory symbol) {\\n        _name = name;\\n        _symbol = symbol;\\n        _decimals = 18;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\\n     * called.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view returns (uint8) {\\n        return _decimals;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20};\\n     *\\n     * Requirements:\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \\\"ERC20: transfer amount exceeds allowance\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \\\"ERC20: decreased allowance below zero\\\"));\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\\n     *\\n     * This is internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        _balances[sender] = _balances[sender].sub(amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        _balances[recipient] = _balances[recipient].add(amount);\\n        emit Transfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `to` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply = _totalSupply.add(amount);\\n        _balances[account] = _balances[account].add(amount);\\n        emit Transfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        _balances[account] = _balances[account].sub(amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        _totalSupply = _totalSupply.sub(amount);\\n        emit Transfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Sets {decimals} to a value other than the default one of 18.\\n     *\\n     * WARNING: This function should only be called from the constructor. Most\\n     * applications that interact with token contracts will not expect\\n     * {decimals} to ever change, and may work incorrectly if it does.\\n     */\\n    function _setupDecimals(uint8 decimals_) internal {\\n        _decimals = decimals_;\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be to transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\\n}\\n\",\"keccak256\":\"0xf1ac0ee2ca2b36f90574d3b2b37422ced4fa829741d80794c62f5958a2d8f474\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly { codehash := extcodehash(account) }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n        (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain`call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n      return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n        return _functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        return _functionCallWithValue(target, data, value, errorMessage);\\n    }\\n\\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                // solhint-disable-next-line no-inline-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x698f929f1097637d051976b322a2d532c27df022b09010e8d091e2888a5ebdf8\",\"license\":\"MIT\"},\"src.sol/testing/TestToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.1;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\n/* This token is ONLY useful for testing\\n * Anybody can mint as many tokens as they like\\n * Anybody can burn anyone else's tokens\\n */\\ncontract TestToken is ERC20 {\\n    constructor() ERC20(\\\"Test Token\\\", \\\"TEST\\\") {\\n        _mint(msg.sender, 1000000 ether);\\n    }\\n\\n    function mint(address account, uint256 amount) external {\\n        _mint(account, amount);\\n    }\\n\\n    function burn(address account, uint256 amount) external {\\n        _burn(account, amount);\\n    }\\n}\\n\",\"keccak256\":\"0xe879a63f0b107705dc9405af3efc7adc2f6425da2c5ec571c72f91db2a059876\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 590,
                "contract": "src.sol/testing/TestToken.sol:TestToken",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 596,
                "contract": "src.sol/testing/TestToken.sol:TestToken",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 598,
                "contract": "src.sol/testing/TestToken.sol:TestToken",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 600,
                "contract": "src.sol/testing/TestToken.sol:TestToken",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 602,
                "contract": "src.sol/testing/TestToken.sol:TestToken",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              },
              {
                "astId": 604,
                "contract": "src.sol/testing/TestToken.sol:TestToken",
                "label": "_decimals",
                "offset": 0,
                "slot": "5",
                "type": "t_uint8"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint8": {
                "encoding": "inplace",
                "label": "uint8",
                "numberOfBytes": "1"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "src.sol/transferDefinitions/HashlockTransfer.sol": {
        "HashlockTransfer": {
          "abi": [
            {
              "inputs": [],
              "name": "EncodedCancel",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "Name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ResolverEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "StateEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedState",
                  "type": "bytes"
                }
              ],
              "name": "create",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getRegistryInformation",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                }
              ],
              "name": "resolve",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "internalType": "struct Balance",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "HashlockTransfer",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50610d6c806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638052474d1161005b5780638052474d146100bd5780638de8b77e146100c55780638ef98a7e146100cd57806394184ba9146100ed5761007d565b80630528aa1c14610082578063206162be146100a05780633722aff9146100b5575b600080fd5b61008a61010d565b6040516100979190610a10565b60405180910390f35b6100a8610141565b6040516100979190610c1e565b61008a61034d565b61008a610386565b61008a6103b2565b6100e06100db3660046107ae565b6103ce565b6040516100979190610bb4565b6101006100fb366004610745565b61050e565b60405161009791906109fc565b60606101176105da565b6000815260405161012c908290602001610cae565b60405160208183030381529060405291505090565b6101496105ec565b6040518060a00160405280306001600160a01b0316638052474d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561018d57600080fd5b505afa1580156101a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c99190810190610844565b8152602001306001600160a01b03168152602001306001600160a01b0316638de8b77e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561021657600080fd5b505afa15801561022a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102529190810190610844565b8152602001306001600160a01b0316633722aff96040518163ffffffff1660e01b815260040160006040518083038186803b15801561029057600080fd5b505afa1580156102a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102cc9190810190610844565b8152602001306001600160a01b0316630528aa1c6040518163ffffffff1660e01b815260040160006040518083038186803b15801561030a57600080fd5b505afa15801561031e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103469190810190610844565b9052905090565b6040518060400160405280601781526020017f7475706c65286279746573333220707265496d6167652900000000000000000081525081565b6040518060400160405280601081526020016f2430b9b43637b1b5aa3930b739b332b960811b81525081565b604051806060016040528060278152602001610d106027913981565b6103d6610624565b6103de610649565b6103ea85870187610981565b90506103f46105da565b6104008486018661095c565b905061040a610624565b610416898b018b61087f565b82519091501561050157602083015115806104345750428360200151115b6104595760405162461bcd60e51b815260040161045090610b3e565b60405180910390fd5b6000600283600001516040516020016104729190610a07565b60408051601f198184030181529082905261048c916109e0565b602060405180830381855afa1580156104a9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104cc919061072d565b845190915081146104ef5760405162461bcd60e51b815260040161045090610a75565b50805180516020909101528051600090525b9998505050505050505050565b6000610518610649565b61052483850185610981565b905061052e610624565b61053a8688018861087f565b80515190915061055c5760405162461bcd60e51b815260040161045090610ab7565b8051602001511561057f5760405162461bcd60e51b815260040161045090610a2a565b815161059d5760405162461bcd60e51b815260040161045090610b7f565b602082015115806105b15750428260200151115b6105cd5760405162461bcd60e51b815260040161045090610afc565b5060019695505050505050565b60408051602081019091526000815290565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b6040518060400160405280610637610660565b8152602001610644610660565b905290565b604080518082019091526000808252602082015290565b60405180604001604052806002906020820280368337509192915050565b60008083601f84011261068f578182fd5b50813567ffffffffffffffff8111156106a6578182fd5b6020830191508360208285010111156106be57600080fd5b9250929050565b600082601f8301126106d5578081fd5b815167ffffffffffffffff8111156106eb578182fd5b6106fe601f8201601f1916602001610cb8565b915080825283602082850101111561071557600080fd5b610726816020840160208601610cdf565b5092915050565b60006020828403121561073e578081fd5b5051919050565b6000806000806040858703121561075a578283fd5b843567ffffffffffffffff80821115610771578485fd5b61077d8883890161067e565b90965094506020870135915080821115610795578384fd5b506107a28782880161067e565b95989497509550505050565b600080600080600080606087890312156107c6578182fd5b863567ffffffffffffffff808211156107dd578384fd5b6107e98a838b0161067e565b90985096506020890135915080821115610801578384fd5b61080d8a838b0161067e565b90965094506040890135915080821115610825578384fd5b5061083289828a0161067e565b979a9699509497509295939492505050565b600060208284031215610855578081fd5b815167ffffffffffffffff81111561086b578182fd5b610877848285016106c5565b949350505050565b600060808284031215610890578081fd5b61089a6040610cb8565b83601f8401126108a8578182fd5b6108b26040610cb8565b808460408601878111156108c4578586fd5b855b60028110156108e55782358552602094850194909201916001016108c6565b5082855287605f8801126108f7578586fd5b6109016040610cb8565b9350839250905060808601871015610917578485fd5b845b600281101561094d5781356001600160a01b0381168114610938578687fd5b84526020938401939190910190600101610919565b50506020830152509392505050565b60006020828403121561096d578081fd5b6109776020610cb8565b9135825250919050565b600060408284031215610992578081fd5b61099c6040610cb8565b82358152602083013560208201528091505092915050565b600081518084526109cc816020860160208601610cdf565b601f01601f19169290920160200192915050565b600082516109f2818460208701610cdf565b9190910192915050565b901515815260200190565b90815260200190565b600060208252610a2360208301846109b4565b9392505050565b6020808252602b908201527f486173686c6f636b5472616e736665723a204e4f4e5a45524f5f52454349504960408201526a454e545f42414c414e434560a81b606082015260800190565b60208082526022908201527f486173686c6f636b5472616e736665723a20494e56414c49445f505245494d41604082015261474560f01b606082015260800190565b60208082526025908201527f486173686c6f636b5472616e736665723a205a4552305f53454e4445525f42416040820152644c414e434560d81b606082015260800190565b60208082526022908201527f486173686c6f636b5472616e736665723a20455850495245445f54494d454c4f604082015261434b60f01b606082015260800190565b60208082526021908201527f486173686c6f636b5472616e736665723a205041594d454e545f4558504952456040820152601160fa1b606082015260800190565b6020808252818101527f486173686c6f636b5472616e736665723a20454d5054595f4c4f434b48415348604082015260600190565b815160808201908260005b6002811015610bde578251825260209283019290910190600101610bbf565b5050506020808401516040840160005b6002811015610c145782516001600160a01b031682529183019190830190600101610bee565b5050505092915050565b600060208252825160a06020840152610c3a60c08401826109b4565b905060018060a01b0360208501511660408401526040840151601f1980858403016060860152610c6a83836109b4565b92506060860151915080858403016080860152610c8783836109b4565b925060808601519150808584030160a086015250610ca582826109b4565b95945050505050565b9051815260200190565b60405181810167ffffffffffffffff81118282101715610cd757600080fd5b604052919050565b60005b83811015610cfa578181015183820152602001610ce2565b83811115610d09576000848401525b5050505056fe7475706c652862797465733332206c6f636b486173682c2075696e743235362065787069727929a2646970667358221220f7a1aad5efbe0de5a92ccb20170dbe8d594d5a4ccb943cb48fbcd3fcbc98e24c64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6C DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8052474D GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8052474D EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x8DE8B77E EQ PUSH2 0xC5 JUMPI DUP1 PUSH4 0x8EF98A7E EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x94184BA9 EQ PUSH2 0xED JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x528AA1C EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x206162BE EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x3722AFF9 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x10D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA8 PUSH2 0x141 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x8A PUSH2 0x34D JUMP JUMPDEST PUSH2 0x8A PUSH2 0x386 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x7AE JUMP JUMPDEST PUSH2 0x3CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xBB4 JUMP JUMPDEST PUSH2 0x100 PUSH2 0xFB CALLDATASIZE PUSH1 0x4 PUSH2 0x745 JUMP JUMPDEST PUSH2 0x50E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x9FC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x117 PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH2 0x12C SWAP1 DUP3 SWAP1 PUSH1 0x20 ADD PUSH2 0xCAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x149 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8052474D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1C9 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DE8B77E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x252 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3722AFF9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2CC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x528AA1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x346 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7475706C65286279746573333220707265496D61676529000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD PUSH16 0x2430B9B43637B1B5AA3930B739B332B9 PUSH1 0x81 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD10 PUSH1 0x27 SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x624 JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x649 JUMP JUMPDEST PUSH2 0x3EA DUP6 DUP8 ADD DUP8 PUSH2 0x981 JUMP JUMPDEST SWAP1 POP PUSH2 0x3F4 PUSH2 0x5DA JUMP JUMPDEST PUSH2 0x400 DUP5 DUP7 ADD DUP7 PUSH2 0x95C JUMP JUMPDEST SWAP1 POP PUSH2 0x40A PUSH2 0x624 JUMP JUMPDEST PUSH2 0x416 DUP10 DUP12 ADD DUP12 PUSH2 0x87F JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x501 JUMPI PUSH1 0x20 DUP4 ADD MLOAD ISZERO DUP1 PUSH2 0x434 JUMPI POP TIMESTAMP DUP4 PUSH1 0x20 ADD MLOAD GT JUMPDEST PUSH2 0x459 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xB3E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x472 SWAP2 SWAP1 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x48C SWAP2 PUSH2 0x9E0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4CC SWAP2 SWAP1 PUSH2 0x72D JUMP JUMPDEST DUP5 MLOAD SWAP1 SWAP2 POP DUP2 EQ PUSH2 0x4EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xA75 JUMP JUMPDEST POP DUP1 MLOAD DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE DUP1 MLOAD PUSH1 0x0 SWAP1 MSTORE JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x518 PUSH2 0x649 JUMP JUMPDEST PUSH2 0x524 DUP4 DUP6 ADD DUP6 PUSH2 0x981 JUMP JUMPDEST SWAP1 POP PUSH2 0x52E PUSH2 0x624 JUMP JUMPDEST PUSH2 0x53A DUP7 DUP9 ADD DUP9 PUSH2 0x87F JUMP JUMPDEST DUP1 MLOAD MLOAD SWAP1 SWAP2 POP PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xAB7 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x57F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xA2A JUMP JUMPDEST DUP2 MLOAD PUSH2 0x59D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD ISZERO DUP1 PUSH2 0x5B1 JUMPI POP TIMESTAMP DUP3 PUSH1 0x20 ADD MLOAD GT JUMPDEST PUSH2 0x5CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xAFC JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x637 PUSH2 0x660 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x644 PUSH2 0x660 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x68F JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6A6 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6D5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6EB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x6FE PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xCB8 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x726 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCDF JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x73E JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x75A JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x771 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x77D DUP9 DUP4 DUP10 ADD PUSH2 0x67E JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x795 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x7A2 DUP8 DUP3 DUP9 ADD PUSH2 0x67E JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x7C6 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7DD JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x7E9 DUP11 DUP4 DUP12 ADD PUSH2 0x67E JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x801 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x80D DUP11 DUP4 DUP12 ADD PUSH2 0x67E JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x825 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x832 DUP10 DUP3 DUP11 ADD PUSH2 0x67E JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x855 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x86B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x877 DUP5 DUP3 DUP6 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x890 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x89A PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x8A8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x8B2 PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x8C4 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x8E5 JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x8C6 JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x8F7 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x901 PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x917 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x94D JUMPI DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x938 JUMPI DUP7 DUP8 REVERT JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x919 JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x96D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x977 PUSH1 0x20 PUSH2 0xCB8 JUMP JUMPDEST SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x992 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x99C PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x9CC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCDF JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x9F2 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xCDF JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xA23 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9B4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A204E4F4E5A45524F5F524543495049 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x454E545F42414C414E4345 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A20494E56414C49445F505245494D41 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x4745 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A205A4552305F53454E4445525F4241 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x4C414E4345 PUSH1 0xD8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A20455850495245445F54494D454C4F PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x434B PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A205041594D454E545F455850495245 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A20454D5054595F4C4F434B48415348 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x80 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xBDE JUMPI DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xC14 JUMPI DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBEE JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xC3A PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x9B4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1F NOT DUP1 DUP6 DUP5 SUB ADD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xC6A DUP4 DUP4 PUSH2 0x9B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0xC87 DUP4 DUP4 PUSH2 0x9B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xA0 DUP7 ADD MSTORE POP PUSH2 0xCA5 DUP3 DUP3 PUSH2 0x9B4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xCD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCFA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCE2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD09 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID PUSH21 0x75706C652862797465733332206C6F636B48617368 0x2C KECCAK256 PUSH22 0x696E743235362065787069727929A264697066735822 SLT KECCAK256 0xF7 LOG1 0xAA 0xD5 0xEF 0xBE 0xD 0xE5 0xA9 0x2C 0xCB KECCAK256 OR 0xD 0xBE DUP14 MSIZE 0x4D GAS 0x4C 0xCB SWAP5 EXTCODECOPY 0xB4 DUP16 0xBC 0xD3 0xFC 0xBC SWAP9 0xE2 0x4C PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "431:3056:45:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c80638052474d1161005b5780638052474d146100bd5780638de8b77e146100c55780638ef98a7e146100cd57806394184ba9146100ed5761007d565b80630528aa1c14610082578063206162be146100a05780633722aff9146100b5575b600080fd5b61008a61010d565b6040516100979190610a10565b60405180910390f35b6100a8610141565b6040516100979190610c1e565b61008a61034d565b61008a610386565b61008a6103b2565b6100e06100db3660046107ae565b6103ce565b6040516100979190610bb4565b6101006100fb366004610745565b61050e565b60405161009791906109fc565b60606101176105da565b6000815260405161012c908290602001610cae565b60405160208183030381529060405291505090565b6101496105ec565b6040518060a00160405280306001600160a01b0316638052474d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561018d57600080fd5b505afa1580156101a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c99190810190610844565b8152602001306001600160a01b03168152602001306001600160a01b0316638de8b77e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561021657600080fd5b505afa15801561022a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102529190810190610844565b8152602001306001600160a01b0316633722aff96040518163ffffffff1660e01b815260040160006040518083038186803b15801561029057600080fd5b505afa1580156102a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102cc9190810190610844565b8152602001306001600160a01b0316630528aa1c6040518163ffffffff1660e01b815260040160006040518083038186803b15801561030a57600080fd5b505afa15801561031e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103469190810190610844565b9052905090565b6040518060400160405280601781526020017f7475706c65286279746573333220707265496d6167652900000000000000000081525081565b6040518060400160405280601081526020016f2430b9b43637b1b5aa3930b739b332b960811b81525081565b604051806060016040528060278152602001610d106027913981565b6103d6610624565b6103de610649565b6103ea85870187610981565b90506103f46105da565b6104008486018661095c565b905061040a610624565b610416898b018b61087f565b82519091501561050157602083015115806104345750428360200151115b6104595760405162461bcd60e51b815260040161045090610b3e565b60405180910390fd5b6000600283600001516040516020016104729190610a07565b60408051601f198184030181529082905261048c916109e0565b602060405180830381855afa1580156104a9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104cc919061072d565b845190915081146104ef5760405162461bcd60e51b815260040161045090610a75565b50805180516020909101528051600090525b9998505050505050505050565b6000610518610649565b61052483850185610981565b905061052e610624565b61053a8688018861087f565b80515190915061055c5760405162461bcd60e51b815260040161045090610ab7565b8051602001511561057f5760405162461bcd60e51b815260040161045090610a2a565b815161059d5760405162461bcd60e51b815260040161045090610b7f565b602082015115806105b15750428260200151115b6105cd5760405162461bcd60e51b815260040161045090610afc565b5060019695505050505050565b60408051602081019091526000815290565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b6040518060400160405280610637610660565b8152602001610644610660565b905290565b604080518082019091526000808252602082015290565b60405180604001604052806002906020820280368337509192915050565b60008083601f84011261068f578182fd5b50813567ffffffffffffffff8111156106a6578182fd5b6020830191508360208285010111156106be57600080fd5b9250929050565b600082601f8301126106d5578081fd5b815167ffffffffffffffff8111156106eb578182fd5b6106fe601f8201601f1916602001610cb8565b915080825283602082850101111561071557600080fd5b610726816020840160208601610cdf565b5092915050565b60006020828403121561073e578081fd5b5051919050565b6000806000806040858703121561075a578283fd5b843567ffffffffffffffff80821115610771578485fd5b61077d8883890161067e565b90965094506020870135915080821115610795578384fd5b506107a28782880161067e565b95989497509550505050565b600080600080600080606087890312156107c6578182fd5b863567ffffffffffffffff808211156107dd578384fd5b6107e98a838b0161067e565b90985096506020890135915080821115610801578384fd5b61080d8a838b0161067e565b90965094506040890135915080821115610825578384fd5b5061083289828a0161067e565b979a9699509497509295939492505050565b600060208284031215610855578081fd5b815167ffffffffffffffff81111561086b578182fd5b610877848285016106c5565b949350505050565b600060808284031215610890578081fd5b61089a6040610cb8565b83601f8401126108a8578182fd5b6108b26040610cb8565b808460408601878111156108c4578586fd5b855b60028110156108e55782358552602094850194909201916001016108c6565b5082855287605f8801126108f7578586fd5b6109016040610cb8565b9350839250905060808601871015610917578485fd5b845b600281101561094d5781356001600160a01b0381168114610938578687fd5b84526020938401939190910190600101610919565b50506020830152509392505050565b60006020828403121561096d578081fd5b6109776020610cb8565b9135825250919050565b600060408284031215610992578081fd5b61099c6040610cb8565b82358152602083013560208201528091505092915050565b600081518084526109cc816020860160208601610cdf565b601f01601f19169290920160200192915050565b600082516109f2818460208701610cdf565b9190910192915050565b901515815260200190565b90815260200190565b600060208252610a2360208301846109b4565b9392505050565b6020808252602b908201527f486173686c6f636b5472616e736665723a204e4f4e5a45524f5f52454349504960408201526a454e545f42414c414e434560a81b606082015260800190565b60208082526022908201527f486173686c6f636b5472616e736665723a20494e56414c49445f505245494d41604082015261474560f01b606082015260800190565b60208082526025908201527f486173686c6f636b5472616e736665723a205a4552305f53454e4445525f42416040820152644c414e434560d81b606082015260800190565b60208082526022908201527f486173686c6f636b5472616e736665723a20455850495245445f54494d454c4f604082015261434b60f01b606082015260800190565b60208082526021908201527f486173686c6f636b5472616e736665723a205041594d454e545f4558504952456040820152601160fa1b606082015260800190565b6020808252818101527f486173686c6f636b5472616e736665723a20454d5054595f4c4f434b48415348604082015260600190565b815160808201908260005b6002811015610bde578251825260209283019290910190600101610bbf565b5050506020808401516040840160005b6002811015610c145782516001600160a01b031682529183019190830190600101610bee565b5050505092915050565b600060208252825160a06020840152610c3a60c08401826109b4565b905060018060a01b0360208501511660408401526040840151601f1980858403016060860152610c6a83836109b4565b92506060860151915080858403016080860152610c8783836109b4565b925060808601519150808584030160a086015250610ca582826109b4565b95945050505050565b9051815260200190565b60405181810167ffffffffffffffff81118282101715610cd757600080fd5b604052919050565b60005b83811015610cfa578181015183820152602001610ce2565b83811115610d09576000848401525b5050505056fe7475706c652862797465733332206c6f636b486173682c2075696e743235362065787069727929a2646970667358221220f7a1aad5efbe0de5a92ccb20170dbe8d594d5a4ccb943cb48fbcd3fcbc98e24c64736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8052474D GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8052474D EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x8DE8B77E EQ PUSH2 0xC5 JUMPI DUP1 PUSH4 0x8EF98A7E EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x94184BA9 EQ PUSH2 0xED JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x528AA1C EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x206162BE EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x3722AFF9 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x10D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA8 PUSH2 0x141 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x8A PUSH2 0x34D JUMP JUMPDEST PUSH2 0x8A PUSH2 0x386 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x7AE JUMP JUMPDEST PUSH2 0x3CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xBB4 JUMP JUMPDEST PUSH2 0x100 PUSH2 0xFB CALLDATASIZE PUSH1 0x4 PUSH2 0x745 JUMP JUMPDEST PUSH2 0x50E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x9FC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x117 PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH2 0x12C SWAP1 DUP3 SWAP1 PUSH1 0x20 ADD PUSH2 0xCAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x149 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8052474D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1C9 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DE8B77E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x252 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3722AFF9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2CC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x528AA1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x346 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x844 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7475706C65286279746573333220707265496D61676529000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD PUSH16 0x2430B9B43637B1B5AA3930B739B332B9 PUSH1 0x81 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD10 PUSH1 0x27 SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x624 JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x649 JUMP JUMPDEST PUSH2 0x3EA DUP6 DUP8 ADD DUP8 PUSH2 0x981 JUMP JUMPDEST SWAP1 POP PUSH2 0x3F4 PUSH2 0x5DA JUMP JUMPDEST PUSH2 0x400 DUP5 DUP7 ADD DUP7 PUSH2 0x95C JUMP JUMPDEST SWAP1 POP PUSH2 0x40A PUSH2 0x624 JUMP JUMPDEST PUSH2 0x416 DUP10 DUP12 ADD DUP12 PUSH2 0x87F JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x501 JUMPI PUSH1 0x20 DUP4 ADD MLOAD ISZERO DUP1 PUSH2 0x434 JUMPI POP TIMESTAMP DUP4 PUSH1 0x20 ADD MLOAD GT JUMPDEST PUSH2 0x459 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xB3E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x472 SWAP2 SWAP1 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x48C SWAP2 PUSH2 0x9E0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4CC SWAP2 SWAP1 PUSH2 0x72D JUMP JUMPDEST DUP5 MLOAD SWAP1 SWAP2 POP DUP2 EQ PUSH2 0x4EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xA75 JUMP JUMPDEST POP DUP1 MLOAD DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE DUP1 MLOAD PUSH1 0x0 SWAP1 MSTORE JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x518 PUSH2 0x649 JUMP JUMPDEST PUSH2 0x524 DUP4 DUP6 ADD DUP6 PUSH2 0x981 JUMP JUMPDEST SWAP1 POP PUSH2 0x52E PUSH2 0x624 JUMP JUMPDEST PUSH2 0x53A DUP7 DUP9 ADD DUP9 PUSH2 0x87F JUMP JUMPDEST DUP1 MLOAD MLOAD SWAP1 SWAP2 POP PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xAB7 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x57F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xA2A JUMP JUMPDEST DUP2 MLOAD PUSH2 0x59D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD ISZERO DUP1 PUSH2 0x5B1 JUMPI POP TIMESTAMP DUP3 PUSH1 0x20 ADD MLOAD GT JUMPDEST PUSH2 0x5CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x450 SWAP1 PUSH2 0xAFC JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x637 PUSH2 0x660 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x644 PUSH2 0x660 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x68F JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6A6 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6D5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6EB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x6FE PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xCB8 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x726 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCDF JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x73E JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x75A JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x771 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x77D DUP9 DUP4 DUP10 ADD PUSH2 0x67E JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x795 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x7A2 DUP8 DUP3 DUP9 ADD PUSH2 0x67E JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x7C6 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7DD JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x7E9 DUP11 DUP4 DUP12 ADD PUSH2 0x67E JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x801 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x80D DUP11 DUP4 DUP12 ADD PUSH2 0x67E JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x825 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x832 DUP10 DUP3 DUP11 ADD PUSH2 0x67E JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x855 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x86B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x877 DUP5 DUP3 DUP6 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x890 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x89A PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x8A8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x8B2 PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x8C4 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x8E5 JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x8C6 JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0x8F7 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x901 PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0x917 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x94D JUMPI DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x938 JUMPI DUP7 DUP8 REVERT JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x919 JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x96D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x977 PUSH1 0x20 PUSH2 0xCB8 JUMP JUMPDEST SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x992 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x99C PUSH1 0x40 PUSH2 0xCB8 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x9CC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCDF JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x9F2 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xCDF JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xA23 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9B4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A204E4F4E5A45524F5F524543495049 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x454E545F42414C414E4345 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A20494E56414C49445F505245494D41 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x4745 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A205A4552305F53454E4445525F4241 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x4C414E4345 PUSH1 0xD8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A20455850495245445F54494D454C4F PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x434B PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A205041594D454E545F455850495245 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x486173686C6F636B5472616E736665723A20454D5054595F4C4F434B48415348 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x80 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xBDE JUMPI DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xC14 JUMPI DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBEE JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xC3A PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x9B4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1F NOT DUP1 DUP6 DUP5 SUB ADD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xC6A DUP4 DUP4 PUSH2 0x9B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0xC87 DUP4 DUP4 PUSH2 0x9B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xA0 DUP7 ADD MSTORE POP PUSH2 0xCA5 DUP3 DUP3 PUSH2 0x9B4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xCD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCFA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCE2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD09 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID PUSH21 0x75706C652862797465733332206C6F636B48617368 0x2C KECCAK256 PUSH22 0x696E743235362065787069727929A264697066735822 SLT KECCAK256 0xF7 LOG1 0xAA 0xD5 0xEF 0xBE 0xD 0xE5 0xA9 0x2C 0xCB KECCAK256 OR 0xD 0xBE DUP14 MSIZE 0x4D GAS 0x4C 0xCB SWAP5 EXTCODECOPY 0xB4 DUP16 0xBC 0xD3 0xFC 0xBC SWAP9 0xE2 0x4C PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ",
              "sourceMap": "431:3056:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;963:190;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;511:442:46;;;:::i;:::-;;;;;;;:::i;872:84:45:-;;;:::i;706:57::-;;;:::i;769:97::-;;;:::i;2056:1429::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1160:890::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;963:190::-;1019:12;1041:32;;:::i;:::-;1109:1;1081:30;;1126:20;;;;1081:8;;1126:20;;;:::i;:::-;;;;;;;;;;;;;1119:27;;;963:190;:::o;511:442:46:-;609:25;;:::i;:::-;669:277;;;;;;;;712:4;-1:-1:-1;;;;;712:9:46;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;712:11:46;;;;;;;;;;;;:::i;:::-;669:277;;;;873:4;-1:-1:-1;;;;;669:277:46;;;;;756:4;-1:-1:-1;;;;;756:18:46;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;756:20:46;;;;;;;;;;;;:::i;:::-;669:277;;;;812:4;-1:-1:-1;;;;;812:21:46;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;812:23:46;;;;;;;;;;;;:::i;:::-;669:277;;;;911:4;-1:-1:-1;;;;;911:18:46;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;911:20:46;;;;;;;;;;;;:::i;:::-;669:277;;650:296;-1:-1:-1;511:442:46;:::o;872:84:45:-;;;;;;;;;;;;;;;;;;;:::o;706:57::-;;;;;;;;;;;;;;-1:-1:-1;;;706:57:45;;;;:::o;769:97::-;;;;;;;;;;;;;;;;;;;:::o;2056:1429::-;2227:14;;:::i;:::-;2253:26;;:::i;:::-;2282:41;;;;2293:12;2282:41;:::i;:::-;2253:70;;2333:32;;:::i;:::-;2380:47;;;;2391:15;2380:47;:::i;:::-;2333:94;;2437:22;;:::i;:::-;2462:37;;;;2473:14;2462:37;:::i;:::-;2689:17;;2437:62;;-1:-1:-1;2689:31:45;2685:583;;2787:12;;;;:17;;:51;;;2823:15;2808:5;:12;;;:30;2787:51;2779:97;;;;-1:-1:-1;;;2779:97:45;;;;;;;:::i;:::-;;;;;;;;;2943:21;2967:37;2985:8;:17;;;2974:29;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2974:29:45;;;;;;;;;;2967:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3043:14;;2943:61;;-1:-1:-1;3043:31:45;;3018:124;;;;-1:-1:-1;;;3018:124:45;;;;;;;:::i;:::-;-1:-1:-1;3205:14:45;;:17;;;3185;;;:37;3236:14;;3205;3236:21;;2685:583;3471:7;2056:1429;-1:-1:-1;;;;;;;;;2056:1429:45:o;1160:890::-;1300:4;1349:26;;:::i;:::-;1378:41;;;;1389:12;1378:41;:::i;:::-;1349:70;;1429:22;;:::i;:::-;1454:37;;;;1465:14;1454:37;:::i;:::-;1523:14;;:17;:14;;-1:-1:-1;1502:105:45;;;;-1:-1:-1;;;1502:105:45;;;;;;;:::i;:::-;1639:14;;:17;;;:22;1618:112;;;;-1:-1:-1;;;1618:112:45;;;;;;;:::i;:::-;1761:14;;1740:107;;;;-1:-1:-1;;;1740:107:45;;;;;;;:::i;:::-;1878:12;;;;:17;;:51;;;1914:15;1899:5;:12;;;:30;1878:51;1857:132;;;;-1:-1:-1;;;1857:132:45;;;;;;;:::i;:::-;-1:-1:-1;2039:4:45;;1160:890;-1:-1:-1;;;;;;1160:890:45:o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1768:336::-;;;1882:3;1875:4;1867:6;1863:17;1859:27;1849:2;;-1:-1;;1890:12;1849:2;-1:-1;1920:20;;1960:18;1949:30;;1946:2;;;-1:-1;;1982:12;1946:2;2026:4;2018:6;2014:17;2002:29;;2077:3;2026:4;2057:17;2018:6;2043:32;;2040:41;2037:2;;;2094:1;;2084:12;2037:2;1842:262;;;;;:::o;2113:442::-;;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;-1:-1;;2233:12;2192:2;2273:6;2267:13;22941:18;22933:6;22930:30;22927:2;;;-1:-1;;22963:12;22927:2;2295:64;23036:9;23017:17;;-1:-1;;23013:33;23104:4;23094:15;2295:64;:::i;:::-;2286:73;;2379:6;2372:5;2365:21;2483:3;23104:4;2474:6;2407;2465:16;;2462:25;2459:2;;;2500:1;;2490:12;2459:2;2510:39;2542:6;23104:4;2441:5;2437:16;23104:4;2407:6;2403:17;2510:39;:::i;:::-;;2185:370;;;;:::o;4622:263::-;;4737:2;4725:9;4716:7;4712:23;4708:32;4705:2;;;-1:-1;;4743:12;4705:2;-1:-1;1691:13;;4699:186;-1:-1;4699:186::o;4892:614::-;;;;;5051:2;5039:9;5030:7;5026:23;5022:32;5019:2;;;-1:-1;;5057:12;5019:2;5115:17;5102:31;5153:18;;5145:6;5142:30;5139:2;;;-1:-1;;5175:12;5139:2;5213:64;5269:7;5260:6;5249:9;5245:22;5213:64;:::i;:::-;5195:82;;-1:-1;5195:82;-1:-1;5342:2;5327:18;;5314:32;;-1:-1;5355:30;;;5352:2;;;-1:-1;;5388:12;5352:2;;5426:64;5482:7;5473:6;5462:9;5458:22;5426:64;:::i;:::-;5013:493;;;;-1:-1;5408:82;-1:-1;;;;5013:493::o;5513:863::-;;;;;;;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;-1:-1;;5714:12;5676:2;5772:17;5759:31;5810:18;;5802:6;5799:30;5796:2;;;-1:-1;;5832:12;5796:2;5870:64;5926:7;5917:6;5906:9;5902:22;5870:64;:::i;:::-;5852:82;;-1:-1;5852:82;-1:-1;5999:2;5984:18;;5971:32;;-1:-1;6012:30;;;6009:2;;;-1:-1;;6045:12;6009:2;6083:64;6139:7;6130:6;6119:9;6115:22;6083:64;:::i;:::-;6065:82;;-1:-1;6065:82;-1:-1;6212:2;6197:18;;6184:32;;-1:-1;6225:30;;;6222:2;;;-1:-1;;6258:12;6222:2;;6296:64;6352:7;6343:6;6332:9;6328:22;6296:64;:::i;:::-;5670:706;;;;-1:-1;5670:706;;-1:-1;5670:706;;6278:82;;5670:706;-1:-1;;;5670:706::o;6383:360::-;;6507:2;6495:9;6486:7;6482:23;6478:32;6475:2;;;-1:-1;;6513:12;6475:2;6564:17;6558:24;6602:18;6594:6;6591:30;6588:2;;;-1:-1;;6624:12;6588:2;6654:73;6719:7;6710:6;6699:9;6695:22;6654:73;:::i;:::-;6644:83;6469:274;-1:-1;;;;6469:274::o;7119:292::-;;7248:3;7236:9;7227:7;7223:23;7219:33;7216:2;;;-1:-1;;7255:12;7216:2;3187:20;3202:4;3187:20;:::i;:::-;967:3;960:4;952:6;948:17;944:27;934:2;;-1:-1;;975:12;934:2;1028:78;3202:4;1028:78;:::i;:::-;1112:16;1171:17;3202:4;1204:3;1200:27;1229:3;1200:27;1197:36;1194:2;;;-1:-1;;1236:12;1194:2;-1:-1;1256:206;1009:4;1278:1;1275:13;1256:206;;;4552:20;;1349:50;;22520:4;1413:14;;;;1441;;;;1303:1;1296:9;1256:206;;;1260:14;3291:72;3273:16;3266:98;308:3;289:17;1204:3;289:17;285:27;275:2;;-1:-1;;316:12;275:2;369:86;3202:4;369:86;:::i;:::-;461:16;-1:-1;461:16;;-1:-1;520:17;-1:-1;7248:3;549:27;;546:36;-1:-1;543:2;;;-1:-1;;585:12;543:2;-1:-1;605:214;1009:4;627:1;624:13;605:214;;;80:20;;-1:-1;;;;;25942:54;;26536:43;;26526:2;;-1:-1;;26583:12;26526:2;698:58;;22520:4;770:14;;;;798;;;;;1303:1;645:9;605:214;;;-1:-1;;22520:4;3438:16;;3431:106;-1:-1;3442:5;7210:201;-1:-1;;;7210:201::o;7418:309::-;;7556:2;7544:9;7535:7;7531:23;7527:32;7524:2;;;-1:-1;;7562:12;7524:2;3771:20;7556:2;3771:20;:::i;:::-;1543;;3852:75;;-1:-1;3859:16;7518:209;-1:-1;7518:209::o;7734:303::-;;7869:2;7857:9;7848:7;7844:23;7840:32;7837:2;;;-1:-1;;7875:12;7837:2;4155:20;7869:2;4155:20;:::i;:::-;1556:6;1543:20;4243:16;4236:75;4374:2;4432:9;4428:22;4552:20;4374:2;4393:5;4389:16;4382:75;7927:94;;;;7831:206;;;;:::o;10467:323::-;;10599:5;23996:12;24791:6;24786:3;24779:19;10682:52;10727:6;24828:4;24823:3;24819:14;24828:4;10708:5;10704:16;10682:52;:::i;:::-;23036:9;26432:14;-1:-1;;26428:28;10746:39;;;;24828:4;10746:39;;10547:243;-1:-1;;10547:243::o;17017:271::-;;11307:5;23996:12;11418:52;11463:6;11458:3;11451:4;11444:5;11440:16;11418:52;:::i;:::-;11482:16;;;;;17151:137;-1:-1;;17151:137::o;17295:210::-;25775:13;;25768:21;10191:34;;17416:2;17401:18;;17387:118::o;17512:222::-;10298:37;;;17639:2;17624:18;;17610:124::o;17741:306::-;;17886:2;17907:17;17900:47;17961:76;17886:2;17875:9;17871:18;18023:6;17961:76;:::i;:::-;17953:84;17857:190;-1:-1;;;17857:190::o;18371:416::-;18571:2;18585:47;;;12423:2;18556:18;;;24779:19;12459:34;24819:14;;;12439:55;-1:-1;;;12514:12;;;12507:35;12561:12;;;18542:245::o;18794:416::-;18994:2;19008:47;;;12812:2;18979:18;;;24779:19;12848:34;24819:14;;;12828:55;-1:-1;;;12903:12;;;12896:26;12941:12;;;18965:245::o;19217:416::-;19417:2;19431:47;;;13192:2;19402:18;;;24779:19;13228:34;24819:14;;;13208:55;-1:-1;;;13283:12;;;13276:29;13324:12;;;19388:245::o;19640:416::-;19840:2;19854:47;;;13575:2;19825:18;;;24779:19;13611:34;24819:14;;;13591:55;-1:-1;;;13666:12;;;13659:26;13704:12;;;19811:245::o;20063:416::-;20263:2;20277:47;;;13955:2;20248:18;;;24779:19;13991:34;24819:14;;;13971:55;-1:-1;;;14046:12;;;14039:25;14083:12;;;20234:245::o;20486:416::-;20686:2;20700:47;;;20671:18;;;24779:19;14370:34;24819:14;;;14350:55;14424:12;;;20657:245::o;20909:323::-;14700:23;;21086:3;21071:19;;;21075:9;20909:323;9848:258;23773:4;9870:1;9867:13;9848:258;;;9934:13;;10298:37;;8421:4;24261:14;;;;8412;;;;9895:1;9888:9;9848:258;;;9852:14;;;8421:4;;14908:5;14904:16;14898:23;15046:4;15041:3;15037:14;9863:1;9143:282;23773:4;9165:1;9162:13;9143:282;;;9229:13;;-1:-1;;;;;25942:54;8517:45;;24261:14;;;;8230;;;;1960:18;9183:9;9143:282;;;9147:14;;;;21057:175;;;;:::o;21239:414::-;;21438:2;21459:17;21452:47;15386:16;15380:23;15314:4;21438:2;21427:9;21423:18;15416:38;15469:73;15305:14;21427:9;15305:14;15523:12;15469:73;:::i;:::-;15461:81;;1960:18;;25953:42;;;21438:2;15626:5;15622:16;15616:23;25942:54;15693:14;21427:9;15693:14;8517:45;15693:14;15789:5;15785:16;15779:23;23036:9;;15838:14;21427:9;15842:4;15838:14;;15822;21427:9;15822:14;15815:38;15868:73;15936:4;15922:12;15868:73;:::i;:::-;15860:81;;15822:14;16031:5;16027:16;16021:23;16001:43;;15838:14;21427:9;16084:4;16080:14;;16064;21427:9;16064:14;16057:38;16110:73;16178:4;16164:12;16110:73;:::i;:::-;16102:81;;16064:14;16270:5;16266:16;16260:23;16240:43;;15838:14;21427:9;16323:4;16319:14;;15314:4;21427:9;16303:14;16296:38;;16349:71;16415:4;16401:12;16349:71;:::i;:::-;21505:138;21409:244;-1:-1;;;;;21409:244::o;21660:358::-;16787:23;;10298:37;;21855:2;21840:18;;21826:192::o;22025:256::-;22087:2;22081:9;22113:17;;;22188:18;22173:34;;22209:22;;;22170:62;22167:2;;;22245:1;;22235:12;22167:2;22087;22254:22;22065:216;;-1:-1;22065:216::o;26088:268::-;26153:1;26160:101;26174:6;26171:1;26168:13;26160:101;;;26241:11;;;26235:18;26222:11;;;26215:39;26196:2;26189:10;26160:101;;;26276:6;26273:1;26270:13;26267:2;;;26153:1;26332:6;26327:3;26323:16;26316:27;26267:2;;26137:219;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "687200",
                "executionCost": "721",
                "totalCost": "687921"
              },
              "external": {
                "EncodedCancel()": "infinite",
                "Name()": "infinite",
                "ResolverEncoding()": "infinite",
                "StateEncoding()": "infinite",
                "create(bytes,bytes)": "infinite",
                "getRegistryInformation()": "infinite",
                "resolve(bytes,bytes,bytes)": "infinite"
              }
            },
            "methodIdentifiers": {
              "EncodedCancel()": "0528aa1c",
              "Name()": "8052474d",
              "ResolverEncoding()": "3722aff9",
              "StateEncoding()": "8de8b77e",
              "create(bytes,bytes)": "94184ba9",
              "getRegistryInformation()": "206162be",
              "resolve(bytes,bytes,bytes)": "8ef98a7e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EncodedCancel\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ResolverEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"StateEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedState\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegistryInformation\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"}],\"name\":\"resolve\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"HashlockTransfer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This contract allows users to claim a payment locked in         the application if they provide the correct preImage. The payment is         reverted if not unlocked by the timelock if one is provided.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/transferDefinitions/HashlockTransfer.sol\":\"HashlockTransfer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/transferDefinitions/HashlockTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./TransferDefinition.sol\\\";\\n\\n/// @title HashlockTransfer\\n/// @author Connext <support@connext.network>\\n/// @notice This contract allows users to claim a payment locked in\\n///         the application if they provide the correct preImage. The payment is\\n///         reverted if not unlocked by the timelock if one is provided.\\n\\ncontract HashlockTransfer is TransferDefinition {\\n    struct TransferState {\\n        bytes32 lockHash;\\n        uint256 expiry; // If 0, then no timelock is enforced\\n    }\\n\\n    struct TransferResolver {\\n        bytes32 preImage;\\n    }\\n\\n    // Provide registry information\\n    string public constant override Name = \\\"HashlockTransfer\\\";\\n    string public constant override StateEncoding =\\n        \\\"tuple(bytes32 lockHash, uint256 expiry)\\\";\\n    string public constant override ResolverEncoding =\\n        \\\"tuple(bytes32 preImage)\\\";\\n\\n    function EncodedCancel() external pure override returns(bytes memory) {\\n      TransferResolver memory resolver;\\n      resolver.preImage = bytes32(0);\\n      return abi.encode(resolver);\\n    } \\n\\n    function create(bytes calldata encodedBalance, bytes calldata encodedState)\\n        external\\n        view\\n        override\\n        returns (bool)\\n    {\\n        // Decode parameters\\n        TransferState memory state = abi.decode(encodedState, (TransferState));\\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\\n\\n        require(\\n            balance.amount[0] > 0,\\n            \\\"HashlockTransfer: ZER0_SENDER_BALANCE\\\"\\n        );\\n\\n        require(\\n            balance.amount[1] == 0,\\n            \\\"HashlockTransfer: NONZERO_RECIPIENT_BALANCE\\\"\\n        );\\n        require(\\n            state.lockHash != bytes32(0),\\n            \\\"HashlockTransfer: EMPTY_LOCKHASH\\\"\\n        );\\n        require(\\n            state.expiry == 0 || state.expiry > block.timestamp,\\n            \\\"HashlockTransfer: EXPIRED_TIMELOCK\\\"\\n        );\\n\\n        // Valid transfer state\\n        return true;\\n    }\\n\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata encodedState,\\n        bytes calldata encodedResolver\\n    ) external view override returns (Balance memory) {\\n        TransferState memory state = abi.decode(encodedState, (TransferState));\\n        TransferResolver memory resolver =\\n            abi.decode(encodedResolver, (TransferResolver));\\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\\n\\n        // If you pass in bytes32(0), payment is canceled\\n        // If timelock is nonzero and has expired, payment must be canceled\\n        // otherwise resolve will revert\\n        if (resolver.preImage != bytes32(0)) {\\n            // Payment must not be expired\\n            require(state.expiry == 0 || state.expiry > block.timestamp, \\\"HashlockTransfer: PAYMENT_EXPIRED\\\");\\n\\n            // Check hash for normal payment unlock\\n            bytes32 generatedHash = sha256(abi.encode(resolver.preImage));\\n            require(\\n                state.lockHash == generatedHash,\\n                \\\"HashlockTransfer: INVALID_PREIMAGE\\\"\\n            );\\n\\n            // Update state\\n            balance.amount[1] = balance.amount[0];\\n            balance.amount[0] = 0;\\n        }\\n        // To cancel, the preImage must be empty (not simply incorrect)\\n        // There are no additional state mutations, and the preImage is\\n        // asserted by the `if` statement\\n\\n        return balance;\\n    }\\n}\\n\",\"keccak256\":\"0x0c403a415e87408f8f7be80d9ec3e4415189d5e85fb58e9ddef5730e4a2ae98e\",\"license\":\"UNLICENSED\"},\"src.sol/transferDefinitions/TransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferDefinition.sol\\\";\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title TransferDefinition\\n/// @author Connext <support@connext.network>\\n/// @notice This contract helps reduce boilerplate needed when creating\\n///         new transfer definitions by providing an implementation of\\n///         the required getter\\n\\nabstract contract TransferDefinition is ITransferDefinition {\\n    function getRegistryInformation()\\n        external\\n        view\\n        override\\n        returns (RegisteredTransfer memory)\\n    {\\n        return\\n            RegisteredTransfer({\\n                name: this.Name(),\\n                stateEncoding: this.StateEncoding(),\\n                resolverEncoding: this.ResolverEncoding(),\\n                definition: address(this),\\n                encodedCancel: this.EncodedCancel()\\n            });\\n    }\\n}\\n\",\"keccak256\":\"0xdb8bcb3fadd5c514bc6585b0a48d66952570bbb1a62f18b9dc9a4f693dc11c5e\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This contract allows users to claim a payment locked in         the application if they provide the correct preImage. The payment is         reverted if not unlocked by the timelock if one is provided.",
            "version": 1
          }
        }
      },
      "src.sol/transferDefinitions/TransferDefinition.sol": {
        "TransferDefinition": {
          "abi": [
            {
              "inputs": [],
              "name": "EncodedCancel",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "Name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ResolverEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "StateEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "name": "create",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getRegistryInformation",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "name": "resolve",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "internalType": "struct Balance",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "TransferDefinition",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "EncodedCancel()": "0528aa1c",
              "Name()": "8052474d",
              "ResolverEncoding()": "3722aff9",
              "StateEncoding()": "8de8b77e",
              "create(bytes,bytes)": "94184ba9",
              "getRegistryInformation()": "206162be",
              "resolve(bytes,bytes,bytes)": "8ef98a7e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EncodedCancel\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ResolverEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"StateEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegistryInformation\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"resolve\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"TransferDefinition\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This contract helps reduce boilerplate needed when creating         new transfer definitions by providing an implementation of         the required getter\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/transferDefinitions/TransferDefinition.sol\":\"TransferDefinition\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/transferDefinitions/TransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferDefinition.sol\\\";\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title TransferDefinition\\n/// @author Connext <support@connext.network>\\n/// @notice This contract helps reduce boilerplate needed when creating\\n///         new transfer definitions by providing an implementation of\\n///         the required getter\\n\\nabstract contract TransferDefinition is ITransferDefinition {\\n    function getRegistryInformation()\\n        external\\n        view\\n        override\\n        returns (RegisteredTransfer memory)\\n    {\\n        return\\n            RegisteredTransfer({\\n                name: this.Name(),\\n                stateEncoding: this.StateEncoding(),\\n                resolverEncoding: this.ResolverEncoding(),\\n                definition: address(this),\\n                encodedCancel: this.EncodedCancel()\\n            });\\n    }\\n}\\n\",\"keccak256\":\"0xdb8bcb3fadd5c514bc6585b0a48d66952570bbb1a62f18b9dc9a4f693dc11c5e\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This contract helps reduce boilerplate needed when creating         new transfer definitions by providing an implementation of         the required getter",
            "version": 1
          }
        }
      },
      "src.sol/transferDefinitions/Withdraw.sol": {
        "Withdraw": {
          "abi": [
            {
              "inputs": [],
              "name": "EncodedCancel",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "Name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ResolverEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "StateEncoding",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedState",
                  "type": "bytes"
                }
              ],
              "name": "create",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getRegistryInformation",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "address",
                      "name": "definition",
                      "type": "address"
                    },
                    {
                      "internalType": "string",
                      "name": "stateEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "resolverEncoding",
                      "type": "string"
                    },
                    {
                      "internalType": "bytes",
                      "name": "encodedCancel",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct RegisteredTransfer",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "encodedBalance",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedState",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedResolver",
                  "type": "bytes"
                }
              ],
              "name": "resolve",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "amount",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "address payable[2]",
                      "name": "to",
                      "type": "address[2]"
                    }
                  ],
                  "internalType": "struct Balance",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Connext <support@connext.network>",
            "kind": "dev",
            "methods": {},
            "title": "Withdraw",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50611263806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638052474d1161005b5780638052474d146100bd5780638de8b77e146100c55780638ef98a7e146100cd57806394184ba9146100ed5761007d565b80630528aa1c14610082578063206162be146100a05780633722aff9146100b5575b600080fd5b61008a61010d565b6040516100979190610d6e565b60405180910390f35b6100a861015c565b6040516100979190611060565b61008a610368565b61008a6103a1565b61008a6103c5565b6100e06100db3660046109fc565b6103e1565b6040516100979190610ff6565b6101006100fb366004610993565b6104ca565b6040516100979190610d45565b60606101176107b0565b604080516041808252608082019092529060208201818036833750505081526040516101479082906020016110f0565b60405160208183030381529060405291505090565b6101646107c3565b6040518060a00160405280306001600160a01b0316638052474d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156101a857600080fd5b505afa1580156101bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101e49190810190610a92565b8152602001306001600160a01b03168152602001306001600160a01b0316638de8b77e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561023157600080fd5b505afa158015610245573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261026d9190810190610a92565b8152602001306001600160a01b0316633722aff96040518163ffffffff1660e01b815260040160006040518083038186803b1580156102ab57600080fd5b505afa1580156102bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e79190810190610a92565b8152602001306001600160a01b0316630528aa1c6040518163ffffffff1660e01b815260040160006040518083038186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103619190810190610a92565b9052905090565b6040518060400160405280601f81526020017f7475706c6528627974657320726573706f6e6465725369676e6174757265290081525081565b60405180604001604052806008815260200167576974686472617760c01b81525081565b6040518060c00160405280608f815260200161119f608f913981565b6103e96107fb565b6103f1610820565b6103fd85870187610c02565b90506104076107b0565b61041384860186610b97565b905061041d6107fb565b610429898b018b610ac5565b60408051604180825260808201909252919250606091906020820181803683370190505090508080519060200120836000015180519060200120141561046e576104bc565b825160408501516060860151610485929091610608565b6104aa5760405162461bcd60e51b81526004016104a190610fbf565b60405180910390fd5b60a08401518251602001528151600090525b509998505050505050505050565b60006104d4610820565b6104e083850185610c02565b90506104ea6107fb565b6104f686880188610ac5565b8051602001519091501561051c5760405162461bcd60e51b81526004016104a190610f1f565b60208201516001600160a01b031615801590610544575060408201516001600160a01b031615155b6105605760405162461bcd60e51b81526004016104a190610df6565b60608201516105815760405162461bcd60e51b81526004016104a190610f62565b60808201516105a25760405162461bcd60e51b81526004016104a190610f90565b80515160a083015111156105c85760405162461bcd60e51b81526004016104a190610ea6565b8151602083015160608401516105df929091610608565b6105fb5760405162461bcd60e51b81526004016104a190610e6f565b5060019695505050505050565b6000816001600160a01b031661061e8585610630565b6001600160a01b031614949350505050565b60008061063c84610652565b90506106488184610682565b9150505b92915050565b6000816040516020016106659190610d14565b604051602081830303815290604052805190602001209050919050565b600081516041146106a55760405162461bcd60e51b81526004016104a190610dbf565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156106f75760405162461bcd60e51b81526004016104a190610e2d565b8060ff16601b1415801561070f57508060ff16601c14155b1561072c5760405162461bcd60e51b81526004016104a190610edd565b6000600187838686604051600081526020016040526040516107519493929190610d50565b6020604051602081039080840390855afa158015610773573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107a65760405162461bcd60e51b81526004016104a190610d88565b9695505050505050565b6040518060200160405280606081525090565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b604051806040016040528061080e610883565b815260200161081b610883565b905290565b6040518061010001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016000815260200160006001600160a01b03168152602001606081525090565b60405180604001604052806002906020820280368337509192915050565b803561064c81611186565b60008083601f8401126108bd578182fd5b50813567ffffffffffffffff8111156108d4578182fd5b6020830191508360208285010111156108ec57600080fd5b9250929050565b600082601f830112610903578081fd5b813561091661091182611132565b61110b565b915080825283602082850101111561092d57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112610956578081fd5b815161096461091182611132565b915080825283602082850101111561097b57600080fd5b61098c816020840160208601611156565b5092915050565b600080600080604085870312156109a8578384fd5b843567ffffffffffffffff808211156109bf578586fd5b6109cb888389016108ac565b909650945060208701359150808211156109e3578384fd5b506109f0878288016108ac565b95989497509550505050565b60008060008060008060608789031215610a14578182fd5b863567ffffffffffffffff80821115610a2b578384fd5b610a378a838b016108ac565b90985096506020890135915080821115610a4f578384fd5b610a5b8a838b016108ac565b90965094506040890135915080821115610a73578384fd5b50610a8089828a016108ac565b979a9699509497509295939492505050565b600060208284031215610aa3578081fd5b815167ffffffffffffffff811115610ab9578182fd5b61064884828501610946565b600060808284031215610ad6578081fd5b610ae0604061110b565b83601f840112610aee578182fd5b610af8604061110b565b80846040860187811115610b0a578586fd5b855b6002811015610b2b578235855260209485019490920191600101610b0c565b5082855287605f880112610b3d578586fd5b610b47604061110b565b9350839250905060808601871015610b5d578485fd5b845b6002811015610b88578135610b7381611186565b84526020938401939190910190600101610b5f565b50506020830152509392505050565b600060208284031215610ba8578081fd5b813567ffffffffffffffff80821115610bbf578283fd5b9083019060208286031215610bd2578283fd5b610bdc602061110b565b823582811115610bea578485fd5b610bf6878286016108f3565b82525095945050505050565b600060208284031215610c13578081fd5b813567ffffffffffffffff80821115610c2a578283fd5b8184019150610100808387031215610c40578384fd5b610c498161110b565b9050823582811115610c59578485fd5b610c65878286016108f3565b825250610c7586602085016108a1565b6020820152610c8786604085016108a1565b6040820152606083013560608201526080830135608082015260a083013560a0820152610cb78660c085016108a1565b60c082015260e083013582811115610ccd578485fd5b610cd9878286016108f3565b60e08301525095945050505050565b60008151808452610d00816020860160208601611156565b601f01601f19169290920160200192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610d816020830184610ce8565b9392505050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526017908201527f57697468647261773a20454d5054595f5349474e455253000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601f908201527f57697468647261773a20494e56414c49445f494e49544941544f525f53494700604082015260600190565b6020808252601e908201527f57697468647261773a20494e53554646494349454e545f42414c414e43450000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526023908201527f57697468647261773a204e4f4e5a45524f5f524543495049454e545f42414c416040820152624e434560e81b606082015260800190565b60208082526014908201527357697468647261773a20454d5054595f4441544160601b604082015260600190565b60208082526015908201527457697468647261773a20454d5054595f4e4f4e434560581b604082015260600190565b6020808252601f908201527f57697468647261773a20494e56414c49445f524553504f4e4445525f53494700604082015260600190565b815160808201908260005b6002811015611020578251825260209283019290910190600101611001565b5050506020808401516040840160005b60028110156110565782516001600160a01b031682529183019190830190600101611030565b5050505092915050565b600060208252825160a0602084015261107c60c0840182610ce8565b905060018060a01b0360208501511660408401526040840151601f19808584030160608601526110ac8383610ce8565b925060608601519150808584030160808601526110c98383610ce8565b925060808601519150808584030160a0860152506110e78282610ce8565b95945050505050565b60006020825282516020808401526106486040840182610ce8565b60405181810167ffffffffffffffff8111828210171561112a57600080fd5b604052919050565b600067ffffffffffffffff821115611148578081fd5b50601f01601f191660200190565b60005b83811015611171578181015183820152602001611159565b83811115611180576000848401525b50505050565b6001600160a01b038116811461119b57600080fd5b5056fe7475706c6528627974657320696e69746961746f725369676e61747572652c206164647265737320696e69746961746f722c206164647265737320726573706f6e6465722c206279746573333220646174612c2075696e74323536206e6f6e63652c2075696e74323536206665652c20616464726573732063616c6c546f2c2062797465732063616c6c4461746129a2646970667358221220e6c29ec66c4575ed5816330cc0372206a95865e0e0b591d5a21001f4a374293764736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1263 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8052474D GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8052474D EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x8DE8B77E EQ PUSH2 0xC5 JUMPI DUP1 PUSH4 0x8EF98A7E EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x94184BA9 EQ PUSH2 0xED JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x528AA1C EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x206162BE EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x3722AFF9 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x10D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA8 PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x368 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x9FC JUMP JUMPDEST PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xFF6 JUMP JUMPDEST PUSH2 0x100 PUSH2 0xFB CALLDATASIZE PUSH1 0x4 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x4CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x117 PUSH2 0x7B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH2 0x147 SWAP1 DUP3 SWAP1 PUSH1 0x20 ADD PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x164 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8052474D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1E4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DE8B77E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x26D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3722AFF9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2E7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x528AA1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x339 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x361 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7475706C6528627974657320726573706F6E6465725369676E61747572652900 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x5769746864726177 PUSH1 0xC0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8F DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x119F PUSH1 0x8F SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x3E9 PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x3F1 PUSH2 0x820 JUMP JUMPDEST PUSH2 0x3FD DUP6 DUP8 ADD DUP8 PUSH2 0xC02 JUMP JUMPDEST SWAP1 POP PUSH2 0x407 PUSH2 0x7B0 JUMP JUMPDEST PUSH2 0x413 DUP5 DUP7 ADD DUP7 PUSH2 0xB97 JUMP JUMPDEST SWAP1 POP PUSH2 0x41D PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x429 DUP10 DUP12 ADD DUP12 PUSH2 0xAC5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x0 ADD MLOAD DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ ISZERO PUSH2 0x46E JUMPI PUSH2 0x4BC JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x485 SWAP3 SWAP1 SWAP2 PUSH2 0x608 JUMP JUMPDEST PUSH2 0x4AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xFBF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD DUP3 MLOAD PUSH1 0x20 ADD MSTORE DUP2 MLOAD PUSH1 0x0 SWAP1 MSTORE JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D4 PUSH2 0x820 JUMP JUMPDEST PUSH2 0x4E0 DUP4 DUP6 ADD DUP6 PUSH2 0xC02 JUMP JUMPDEST SWAP1 POP PUSH2 0x4EA PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x4F6 DUP7 DUP9 ADD DUP9 PUSH2 0xAC5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x51C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xF1F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x544 JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST PUSH2 0x560 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xDF6 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x581 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xF62 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH2 0x5A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xF90 JUMP JUMPDEST DUP1 MLOAD MLOAD PUSH1 0xA0 DUP4 ADD MLOAD GT ISZERO PUSH2 0x5C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xEA6 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x5DF SWAP3 SWAP1 SWAP2 PUSH2 0x608 JUMP JUMPDEST PUSH2 0x5FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xE6F JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x61E DUP6 DUP6 PUSH2 0x630 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x63C DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP1 POP PUSH2 0x648 DUP2 DUP5 PUSH2 0x682 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x665 SWAP2 SWAP1 PUSH2 0xD14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x6A5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xE2D JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x70F JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x72C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xEDD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x751 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xD50 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x773 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xD88 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x80E PUSH2 0x883 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x81B PUSH2 0x883 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x64C DUP2 PUSH2 0x1186 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x8BD JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8D4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x903 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x916 PUSH2 0x911 DUP3 PUSH2 0x1132 JUMP JUMPDEST PUSH2 0x110B JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x92D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x956 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x964 PUSH2 0x911 DUP3 PUSH2 0x1132 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x97B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x98C DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1156 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x9A8 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9BF JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x9CB DUP9 DUP4 DUP10 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x9E3 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x9F0 DUP8 DUP3 DUP9 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xA14 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xA2B JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xA37 DUP11 DUP4 DUP12 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xA4F JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xA5B DUP11 DUP4 DUP12 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xA73 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0xA80 DUP10 DUP3 DUP11 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAA3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAB9 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x648 DUP5 DUP3 DUP6 ADD PUSH2 0x946 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAD6 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xAE0 PUSH1 0x40 PUSH2 0x110B JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xAEE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xAF8 PUSH1 0x40 PUSH2 0x110B JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0xB0A JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xB2B JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB0C JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0xB3D JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0xB47 PUSH1 0x40 PUSH2 0x110B JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0xB5D JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xB88 JUMPI DUP2 CALLDATALOAD PUSH2 0xB73 DUP2 PUSH2 0x1186 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xB5F JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBA8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBBF JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 DUP7 SUB SLT ISZERO PUSH2 0xBD2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xBDC PUSH1 0x20 PUSH2 0x110B JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xBEA JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xBF6 DUP8 DUP3 DUP7 ADD PUSH2 0x8F3 JUMP JUMPDEST DUP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC13 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC2A JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP PUSH2 0x100 DUP1 DUP4 DUP8 SUB SLT ISZERO PUSH2 0xC40 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xC49 DUP2 PUSH2 0x110B JUMP JUMPDEST SWAP1 POP DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xC59 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xC65 DUP8 DUP3 DUP7 ADD PUSH2 0x8F3 JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0xC75 DUP7 PUSH1 0x20 DUP6 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xC87 DUP7 PUSH1 0x40 DUP6 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xCB7 DUP7 PUSH1 0xC0 DUP6 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xCCD JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xCD9 DUP8 DUP3 DUP7 ADD PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xD00 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1156 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xD81 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xCE8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x17 SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20454D5054595F5349474E455253000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20494E56414C49445F494E49544941544F525F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20494E53554646494349454E545F42414C414E43450000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A204E4F4E5A45524F5F524543495049454E545F42414C41 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x4E4345 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH20 0x57697468647261773A20454D5054595F44415441 PUSH1 0x60 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x57697468647261773A20454D5054595F4E4F4E4345 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20494E56414C49445F524553504F4E4445525F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x80 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1020 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1001 JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1056 JUMPI DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1030 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x107C PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0xCE8 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1F NOT DUP1 DUP6 DUP5 SUB ADD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x10AC DUP4 DUP4 PUSH2 0xCE8 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x10C9 DUP4 DUP4 PUSH2 0xCE8 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xA0 DUP7 ADD MSTORE POP PUSH2 0x10E7 DUP3 DUP3 PUSH2 0xCE8 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MSTORE PUSH2 0x648 PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0xCE8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1148 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1171 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1159 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1180 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x119B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID PUSH21 0x75706C6528627974657320696E69746961746F7253 PUSH10 0x676E61747572652C2061 PUSH5 0x6472657373 KECCAK256 PUSH10 0x6E69746961746F722C20 PUSH2 0x6464 PUSH19 0x65737320726573706F6E6465722C2062797465 PUSH20 0x333220646174612C2075696E74323536206E6F6E PUSH4 0x652C2075 PUSH10 0x6E74323536206665652C KECCAK256 PUSH2 0x6464 PUSH19 0x6573732063616C6C546F2C2062797465732063 PUSH2 0x6C6C DIFFICULTY PUSH2 0x7461 0x29 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 0xC2 SWAP15 0xC6 PUSH13 0x4575ED5816330CC0372206A958 PUSH6 0xE0E0B591D5A2 LT ADD DELEGATECALL LOG3 PUSH21 0x293764736F6C634300070100330000000000000000 ",
              "sourceMap": "363:3511:47:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c80638052474d1161005b5780638052474d146100bd5780638de8b77e146100c55780638ef98a7e146100cd57806394184ba9146100ed5761007d565b80630528aa1c14610082578063206162be146100a05780633722aff9146100b5575b600080fd5b61008a61010d565b6040516100979190610d6e565b60405180910390f35b6100a861015c565b6040516100979190611060565b61008a610368565b61008a6103a1565b61008a6103c5565b6100e06100db3660046109fc565b6103e1565b6040516100979190610ff6565b6101006100fb366004610993565b6104ca565b6040516100979190610d45565b60606101176107b0565b604080516041808252608082019092529060208201818036833750505081526040516101479082906020016110f0565b60405160208183030381529060405291505090565b6101646107c3565b6040518060a00160405280306001600160a01b0316638052474d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156101a857600080fd5b505afa1580156101bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101e49190810190610a92565b8152602001306001600160a01b03168152602001306001600160a01b0316638de8b77e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561023157600080fd5b505afa158015610245573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261026d9190810190610a92565b8152602001306001600160a01b0316633722aff96040518163ffffffff1660e01b815260040160006040518083038186803b1580156102ab57600080fd5b505afa1580156102bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e79190810190610a92565b8152602001306001600160a01b0316630528aa1c6040518163ffffffff1660e01b815260040160006040518083038186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103619190810190610a92565b9052905090565b6040518060400160405280601f81526020017f7475706c6528627974657320726573706f6e6465725369676e6174757265290081525081565b60405180604001604052806008815260200167576974686472617760c01b81525081565b6040518060c00160405280608f815260200161119f608f913981565b6103e96107fb565b6103f1610820565b6103fd85870187610c02565b90506104076107b0565b61041384860186610b97565b905061041d6107fb565b610429898b018b610ac5565b60408051604180825260808201909252919250606091906020820181803683370190505090508080519060200120836000015180519060200120141561046e576104bc565b825160408501516060860151610485929091610608565b6104aa5760405162461bcd60e51b81526004016104a190610fbf565b60405180910390fd5b60a08401518251602001528151600090525b509998505050505050505050565b60006104d4610820565b6104e083850185610c02565b90506104ea6107fb565b6104f686880188610ac5565b8051602001519091501561051c5760405162461bcd60e51b81526004016104a190610f1f565b60208201516001600160a01b031615801590610544575060408201516001600160a01b031615155b6105605760405162461bcd60e51b81526004016104a190610df6565b60608201516105815760405162461bcd60e51b81526004016104a190610f62565b60808201516105a25760405162461bcd60e51b81526004016104a190610f90565b80515160a083015111156105c85760405162461bcd60e51b81526004016104a190610ea6565b8151602083015160608401516105df929091610608565b6105fb5760405162461bcd60e51b81526004016104a190610e6f565b5060019695505050505050565b6000816001600160a01b031661061e8585610630565b6001600160a01b031614949350505050565b60008061063c84610652565b90506106488184610682565b9150505b92915050565b6000816040516020016106659190610d14565b604051602081830303815290604052805190602001209050919050565b600081516041146106a55760405162461bcd60e51b81526004016104a190610dbf565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156106f75760405162461bcd60e51b81526004016104a190610e2d565b8060ff16601b1415801561070f57508060ff16601c14155b1561072c5760405162461bcd60e51b81526004016104a190610edd565b6000600187838686604051600081526020016040526040516107519493929190610d50565b6020604051602081039080840390855afa158015610773573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107a65760405162461bcd60e51b81526004016104a190610d88565b9695505050505050565b6040518060200160405280606081525090565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b604051806040016040528061080e610883565b815260200161081b610883565b905290565b6040518061010001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016000815260200160006001600160a01b03168152602001606081525090565b60405180604001604052806002906020820280368337509192915050565b803561064c81611186565b60008083601f8401126108bd578182fd5b50813567ffffffffffffffff8111156108d4578182fd5b6020830191508360208285010111156108ec57600080fd5b9250929050565b600082601f830112610903578081fd5b813561091661091182611132565b61110b565b915080825283602082850101111561092d57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112610956578081fd5b815161096461091182611132565b915080825283602082850101111561097b57600080fd5b61098c816020840160208601611156565b5092915050565b600080600080604085870312156109a8578384fd5b843567ffffffffffffffff808211156109bf578586fd5b6109cb888389016108ac565b909650945060208701359150808211156109e3578384fd5b506109f0878288016108ac565b95989497509550505050565b60008060008060008060608789031215610a14578182fd5b863567ffffffffffffffff80821115610a2b578384fd5b610a378a838b016108ac565b90985096506020890135915080821115610a4f578384fd5b610a5b8a838b016108ac565b90965094506040890135915080821115610a73578384fd5b50610a8089828a016108ac565b979a9699509497509295939492505050565b600060208284031215610aa3578081fd5b815167ffffffffffffffff811115610ab9578182fd5b61064884828501610946565b600060808284031215610ad6578081fd5b610ae0604061110b565b83601f840112610aee578182fd5b610af8604061110b565b80846040860187811115610b0a578586fd5b855b6002811015610b2b578235855260209485019490920191600101610b0c565b5082855287605f880112610b3d578586fd5b610b47604061110b565b9350839250905060808601871015610b5d578485fd5b845b6002811015610b88578135610b7381611186565b84526020938401939190910190600101610b5f565b50506020830152509392505050565b600060208284031215610ba8578081fd5b813567ffffffffffffffff80821115610bbf578283fd5b9083019060208286031215610bd2578283fd5b610bdc602061110b565b823582811115610bea578485fd5b610bf6878286016108f3565b82525095945050505050565b600060208284031215610c13578081fd5b813567ffffffffffffffff80821115610c2a578283fd5b8184019150610100808387031215610c40578384fd5b610c498161110b565b9050823582811115610c59578485fd5b610c65878286016108f3565b825250610c7586602085016108a1565b6020820152610c8786604085016108a1565b6040820152606083013560608201526080830135608082015260a083013560a0820152610cb78660c085016108a1565b60c082015260e083013582811115610ccd578485fd5b610cd9878286016108f3565b60e08301525095945050505050565b60008151808452610d00816020860160208601611156565b601f01601f19169290920160200192915050565b7f16566563746f72205369676e6564204d6573736167653a0a33320000000000008152601a810191909152603a0190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610d816020830184610ce8565b9392505050565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526017908201527f57697468647261773a20454d5054595f5349474e455253000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601f908201527f57697468647261773a20494e56414c49445f494e49544941544f525f53494700604082015260600190565b6020808252601e908201527f57697468647261773a20494e53554646494349454e545f42414c414e43450000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526023908201527f57697468647261773a204e4f4e5a45524f5f524543495049454e545f42414c416040820152624e434560e81b606082015260800190565b60208082526014908201527357697468647261773a20454d5054595f4441544160601b604082015260600190565b60208082526015908201527457697468647261773a20454d5054595f4e4f4e434560581b604082015260600190565b6020808252601f908201527f57697468647261773a20494e56414c49445f524553504f4e4445525f53494700604082015260600190565b815160808201908260005b6002811015611020578251825260209283019290910190600101611001565b5050506020808401516040840160005b60028110156110565782516001600160a01b031682529183019190830190600101611030565b5050505092915050565b600060208252825160a0602084015261107c60c0840182610ce8565b905060018060a01b0360208501511660408401526040840151601f19808584030160608601526110ac8383610ce8565b925060608601519150808584030160808601526110c98383610ce8565b925060808601519150808584030160a0860152506110e78282610ce8565b95945050505050565b60006020825282516020808401526106486040840182610ce8565b60405181810167ffffffffffffffff8111828210171561112a57600080fd5b604052919050565b600067ffffffffffffffff821115611148578081fd5b50601f01601f191660200190565b60005b83811015611171578181015183820152602001611159565b83811115611180576000848401525b50505050565b6001600160a01b038116811461119b57600080fd5b5056fe7475706c6528627974657320696e69746961746f725369676e61747572652c206164647265737320696e69746961746f722c206164647265737320726573706f6e6465722c206279746573333220646174612c2075696e74323536206e6f6e63652c2075696e74323536206665652c20616464726573732063616c6c546f2c2062797465732063616c6c4461746129a2646970667358221220e6c29ec66c4575ed5816330cc0372206a95865e0e0b591d5a21001f4a374293764736f6c63430007010033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8052474D GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8052474D EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x8DE8B77E EQ PUSH2 0xC5 JUMPI DUP1 PUSH4 0x8EF98A7E EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x94184BA9 EQ PUSH2 0xED JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x528AA1C EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x206162BE EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x3722AFF9 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x10D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA8 PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x368 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x3A1 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x9FC JUMP JUMPDEST PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xFF6 JUMP JUMPDEST PUSH2 0x100 PUSH2 0xFB CALLDATASIZE PUSH1 0x4 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x4CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x117 PUSH2 0x7B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH2 0x147 SWAP1 DUP3 SWAP1 PUSH1 0x20 ADD PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x164 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8052474D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1E4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DE8B77E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x26D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3722AFF9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2E7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x528AA1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x339 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x361 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA92 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7475706C6528627974657320726573706F6E6465725369676E61747572652900 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x5769746864726177 PUSH1 0xC0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8F DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x119F PUSH1 0x8F SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x3E9 PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x3F1 PUSH2 0x820 JUMP JUMPDEST PUSH2 0x3FD DUP6 DUP8 ADD DUP8 PUSH2 0xC02 JUMP JUMPDEST SWAP1 POP PUSH2 0x407 PUSH2 0x7B0 JUMP JUMPDEST PUSH2 0x413 DUP5 DUP7 ADD DUP7 PUSH2 0xB97 JUMP JUMPDEST SWAP1 POP PUSH2 0x41D PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x429 DUP10 DUP12 ADD DUP12 PUSH2 0xAC5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x0 ADD MLOAD DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ ISZERO PUSH2 0x46E JUMPI PUSH2 0x4BC JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x485 SWAP3 SWAP1 SWAP2 PUSH2 0x608 JUMP JUMPDEST PUSH2 0x4AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xFBF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD DUP3 MLOAD PUSH1 0x20 ADD MSTORE DUP2 MLOAD PUSH1 0x0 SWAP1 MSTORE JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D4 PUSH2 0x820 JUMP JUMPDEST PUSH2 0x4E0 DUP4 DUP6 ADD DUP6 PUSH2 0xC02 JUMP JUMPDEST SWAP1 POP PUSH2 0x4EA PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x4F6 DUP7 DUP9 ADD DUP9 PUSH2 0xAC5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x51C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xF1F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x544 JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST PUSH2 0x560 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xDF6 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x581 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xF62 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH2 0x5A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xF90 JUMP JUMPDEST DUP1 MLOAD MLOAD PUSH1 0xA0 DUP4 ADD MLOAD GT ISZERO PUSH2 0x5C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xEA6 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x5DF SWAP3 SWAP1 SWAP2 PUSH2 0x608 JUMP JUMPDEST PUSH2 0x5FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xE6F JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x61E DUP6 DUP6 PUSH2 0x630 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x63C DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP1 POP PUSH2 0x648 DUP2 DUP5 PUSH2 0x682 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x665 SWAP2 SWAP1 PUSH2 0xD14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x6A5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xE2D JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x70F JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x72C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xEDD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x751 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xD50 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x773 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4A1 SWAP1 PUSH2 0xD88 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x80E PUSH2 0x883 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x81B PUSH2 0x883 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x64C DUP2 PUSH2 0x1186 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x8BD JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8D4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x903 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x916 PUSH2 0x911 DUP3 PUSH2 0x1132 JUMP JUMPDEST PUSH2 0x110B JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x92D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x956 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x964 PUSH2 0x911 DUP3 PUSH2 0x1132 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x97B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x98C DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1156 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x9A8 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9BF JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x9CB DUP9 DUP4 DUP10 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x9E3 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x9F0 DUP8 DUP3 DUP9 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xA14 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xA2B JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xA37 DUP11 DUP4 DUP12 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xA4F JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xA5B DUP11 DUP4 DUP12 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xA73 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0xA80 DUP10 DUP3 DUP11 ADD PUSH2 0x8AC JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAA3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAB9 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x648 DUP5 DUP3 DUP6 ADD PUSH2 0x946 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAD6 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xAE0 PUSH1 0x40 PUSH2 0x110B JUMP JUMPDEST DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xAEE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xAF8 PUSH1 0x40 PUSH2 0x110B JUMP JUMPDEST DUP1 DUP5 PUSH1 0x40 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0xB0A JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xB2B JUMPI DUP3 CALLDATALOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB0C JUMP JUMPDEST POP DUP3 DUP6 MSTORE DUP8 PUSH1 0x5F DUP9 ADD SLT PUSH2 0xB3D JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0xB47 PUSH1 0x40 PUSH2 0x110B JUMP JUMPDEST SWAP4 POP DUP4 SWAP3 POP SWAP1 POP PUSH1 0x80 DUP7 ADD DUP8 LT ISZERO PUSH2 0xB5D JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xB88 JUMPI DUP2 CALLDATALOAD PUSH2 0xB73 DUP2 PUSH2 0x1186 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xB5F JUMP JUMPDEST POP POP PUSH1 0x20 DUP4 ADD MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBA8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBBF JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 DUP7 SUB SLT ISZERO PUSH2 0xBD2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xBDC PUSH1 0x20 PUSH2 0x110B JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xBEA JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xBF6 DUP8 DUP3 DUP7 ADD PUSH2 0x8F3 JUMP JUMPDEST DUP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC13 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC2A JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP PUSH2 0x100 DUP1 DUP4 DUP8 SUB SLT ISZERO PUSH2 0xC40 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xC49 DUP2 PUSH2 0x110B JUMP JUMPDEST SWAP1 POP DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xC59 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xC65 DUP8 DUP3 DUP7 ADD PUSH2 0x8F3 JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0xC75 DUP7 PUSH1 0x20 DUP6 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xC87 DUP7 PUSH1 0x40 DUP6 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xCB7 DUP7 PUSH1 0xC0 DUP6 ADD PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0xCCD JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xCD9 DUP8 DUP3 DUP7 ADD PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xD00 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1156 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x16566563746F72205369676E6564204D6573736167653A0A3332000000000000 DUP2 MSTORE PUSH1 0x1A DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0xD81 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xCE8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x17 SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20454D5054595F5349474E455253000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20494E56414C49445F494E49544941544F525F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20494E53554646494349454E545F42414C414E43450000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x22 SWAP1 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A204E4F4E5A45524F5F524543495049454E545F42414C41 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x4E4345 PUSH1 0xE8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH20 0x57697468647261773A20454D5054595F44415441 PUSH1 0x60 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x57697468647261773A20454D5054595F4E4F4E4345 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x57697468647261773A20494E56414C49445F524553504F4E4445525F53494700 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x80 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1020 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1001 JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1056 JUMPI DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1030 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x107C PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0xCE8 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1F NOT DUP1 DUP6 DUP5 SUB ADD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x10AC DUP4 DUP4 PUSH2 0xCE8 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x10C9 DUP4 DUP4 PUSH2 0xCE8 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xA0 DUP7 ADD MSTORE POP PUSH2 0x10E7 DUP3 DUP3 PUSH2 0xCE8 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MSTORE PUSH2 0x648 PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0xCE8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1148 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1171 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1159 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1180 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x119B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID PUSH21 0x75706C6528627974657320696E69746961746F7253 PUSH10 0x676E61747572652C2061 PUSH5 0x6472657373 KECCAK256 PUSH10 0x6E69746961746F722C20 PUSH2 0x6464 PUSH19 0x65737320726573706F6E6465722C2062797465 PUSH20 0x333220646174612C2075696E74323536206E6F6E PUSH4 0x652C2075 PUSH10 0x6E74323536206665652C KECCAK256 PUSH2 0x6464 PUSH19 0x6573732063616C6C546F2C2062797465732063 PUSH2 0x6C6C DIFFICULTY PUSH2 0x7461 0x29 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 0xC2 SWAP15 0xC6 PUSH13 0x4575ED5816330CC0372206A958 PUSH6 0xE0E0B591D5A2 LT ADD DELEGATECALL LOG3 PUSH21 0x293764736F6C634300070100330000000000000000 ",
              "sourceMap": "363:3511:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1217:203;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;511:442:46;;;:::i;:::-;;;;;;;:::i;1118:92:47:-;;;:::i;856:49::-;;;:::i;911:201::-;;;:::i;2526:1346::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1426:1094::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1217:203::-;1273:12;1295:32;;:::i;:::-;1365:13;;;1375:2;1365:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1335:43:47;;1393:20;;;;1335:43;;1393:20;;;:::i;:::-;;;;;;;;;;;;;1386:27;;;1217:203;:::o;511:442:46:-;609:25;;:::i;:::-;669:277;;;;;;;;712:4;-1:-1:-1;;;;;712:9:46;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;712:11:46;;;;;;;;;;;;:::i;:::-;669:277;;;;873:4;-1:-1:-1;;;;;669:277:46;;;;;756:4;-1:-1:-1;;;;;756:18:46;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;756:20:46;;;;;;;;;;;;:::i;:::-;669:277;;;;812:4;-1:-1:-1;;;;;812:21:46;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;812:23:46;;;;;;;;;;;;:::i;:::-;669:277;;;;911:4;-1:-1:-1;;;;;911:18:46;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;911:20:46;;;;;;;;;;;;:::i;:::-;669:277;;650:296;-1:-1:-1;511:442:46;:::o;1118:92:47:-;;;;;;;;;;;;;;;;;;;:::o;856:49::-;;;;;;;;;;;;;;-1:-1:-1;;;856:49:47;;;;:::o;911:201::-;;;;;;;;;;;;;;;;;;;:::o;2526:1346::-;2697:14;;:::i;:::-;2723:26;;:::i;:::-;2752:41;;;;2763:12;2752:41;:::i;:::-;2723:70;;2803:32;;:::i;:::-;2850:47;;;;2861:15;2850:47;:::i;:::-;2803:94;;2907:22;;:::i;:::-;2932:37;;;;2943:14;2932:37;:::i;:::-;3174:13;;;3184:2;3174:13;;;;;;;;;2907:62;;-1:-1:-1;3157:14:47;;3174:13;;;;;;;;;;;-1:-1:-1;3174:13:47;3157:30;;3253:1;3243:12;;;;;;3211:8;:27;;;3201:38;;;;;;:54;3197:644;;;;;;3434:27;;3483:15;;;;3387:10;;;;:129;;:10;;:25;:129::i;:::-;3362:219;;;;-1:-1:-1;;;3362:219:47;;;;;;;:::i;:::-;;;;;;;;;3786:9;;;;3766:14;;:17;;:29;3809:14;;3829:1;3809:21;;3197:644;-1:-1:-1;3858:7:47;2526:1346;-1:-1:-1;;;;;;;;;2526:1346:47:o;1426:1094::-;1566:4;1623:26;;:::i;:::-;1652:41;;;;1663:12;1652:41;:::i;:::-;1623:70;;1703:22;;:::i;:::-;1728:37;;;;1739:14;1728:37;:::i;:::-;1784:14;;:17;;;:14;;-1:-1:-1;1784:22:47;1776:70;;;;-1:-1:-1;;;1776:70:47;;;;;;;:::i;:::-;1877:15;;;;-1:-1:-1;;;;;1877:29:47;;;;;:62;;-1:-1:-1;1910:15:47;;;;-1:-1:-1;;;;;1910:29:47;;;1877:62;1856:132;;;;-1:-1:-1;;;1856:132:47;;;;;;;:::i;:::-;2006:10;;;;1998:57;;;;-1:-1:-1;;;1998:57:47;;;;;;;:::i;:::-;2073:11;;;;2065:59;;;;-1:-1:-1;;;2065:59:47;;;;;;;:::i;:::-;2168:14;;:17;2155:9;;;;:30;;2134:107;;;;-1:-1:-1;;;2134:107:47;;;;;;;:::i;:::-;2315:24;;2357:15;;;;2272:10;;;;:114;;:10;;:25;:114::i;:::-;2251:192;;;;-1:-1:-1;;;2251:192:47;;;;;;;:::i;:::-;-1:-1:-1;2509:4:47;;1426:1094;-1:-1:-1;;;;;;1426:1094:47:o;548:229:33:-;686:4;757:13;-1:-1:-1;;;;;709:61:33;:44;737:4;743:9;709:27;:44::i;:::-;-1:-1:-1;;;;;709:61:33;;;548:229;-1:-1:-1;;;;548:229:33:o;783:246::-;905:7;928:14;945:28;968:4;945:22;:28::i;:::-;928:45;;990:32;1004:6;1012:9;990:13;:32::i;:::-;983:39;;;783:246;;;;;:::o;1035:303::-;1128:7;1325:4;1274:56;;;;;;;;:::i;:::-;;;;;;;;;;;;;1264:67;;;;;;1245:86;;1035:303;;;:::o;1064:2068:2:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:2;;;;;;;:::i;1199:94::-;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:2;;;;;;;:::i;2642:154::-;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:2;;;;;;;:::i;2806:93::-;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:2;;-1:-1:-1;;3010:24:2;;;-1:-1:-1;;;;;;;3052:20:2;;3044:57;;;;-1:-1:-1;;;3044:57:2;;;;;;;:::i;:::-;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:2:o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;:::i;1764:336::-;;;1878:3;1871:4;1863:6;1859:17;1855:27;1845:2;;-1:-1;;1886:12;1845:2;-1:-1;1916:20;;1956:18;1945:30;;1942:2;;;-1:-1;;1978:12;1942:2;2022:4;2014:6;2010:17;1998:29;;2073:3;2022:4;2053:17;2014:6;2039:32;;2036:41;2033:2;;;2090:1;;2080:12;2033:2;1838:262;;;;;:::o;2109:440::-;;2210:3;2203:4;2195:6;2191:17;2187:27;2177:2;;-1:-1;;2218:12;2177:2;2265:6;2252:20;2287:64;2302:48;2343:6;2302:48;:::i;:::-;2287:64;:::i;:::-;2278:73;;2371:6;2364:5;2357:21;2475:3;2407:4;2466:6;2399;2457:16;;2454:25;2451:2;;;2492:1;;2482:12;2451:2;32386:6;2407:4;2399:6;2395:17;2407:4;2433:5;2429:16;32363:30;32442:1;32424:16;;;2407:4;32424:16;32417:27;2433:5;2170:379;-1:-1;;2170:379::o;2558:442::-;;2670:3;2663:4;2655:6;2651:17;2647:27;2637:2;;-1:-1;;2678:12;2637:2;2718:6;2712:13;2740:64;2755:48;2796:6;2755:48;:::i;2740:64::-;2731:73;;2824:6;2817:5;2810:21;2928:3;2860:4;2919:6;2852;2910:16;;2907:25;2904:2;;;2945:1;;2935:12;2904:2;2955:39;2987:6;2860:4;2886:5;2882:16;2860:4;2852:6;2848:17;2955:39;:::i;:::-;;2630:370;;;;:::o;6242:614::-;;;;;6401:2;6389:9;6380:7;6376:23;6372:32;6369:2;;;-1:-1;;6407:12;6369:2;6465:17;6452:31;6503:18;;6495:6;6492:30;6489:2;;;-1:-1;;6525:12;6489:2;6563:64;6619:7;6610:6;6599:9;6595:22;6563:64;:::i;:::-;6545:82;;-1:-1;6545:82;-1:-1;6692:2;6677:18;;6664:32;;-1:-1;6705:30;;;6702:2;;;-1:-1;;6738:12;6702:2;;6776:64;6832:7;6823:6;6812:9;6808:22;6776:64;:::i;:::-;6363:493;;;;-1:-1;6758:82;-1:-1;;;;6363:493::o;6863:863::-;;;;;;;7058:2;7046:9;7037:7;7033:23;7029:32;7026:2;;;-1:-1;;7064:12;7026:2;7122:17;7109:31;7160:18;;7152:6;7149:30;7146:2;;;-1:-1;;7182:12;7146:2;7220:64;7276:7;7267:6;7256:9;7252:22;7220:64;:::i;:::-;7202:82;;-1:-1;7202:82;-1:-1;7349:2;7334:18;;7321:32;;-1:-1;7362:30;;;7359:2;;;-1:-1;;7395:12;7359:2;7433:64;7489:7;7480:6;7469:9;7465:22;7433:64;:::i;:::-;7415:82;;-1:-1;7415:82;-1:-1;7562:2;7547:18;;7534:32;;-1:-1;7575:30;;;7572:2;;;-1:-1;;7608:12;7572:2;;7646:64;7702:7;7693:6;7682:9;7678:22;7646:64;:::i;:::-;7020:706;;;;-1:-1;7020:706;;-1:-1;7020:706;;7628:82;;7020:706;-1:-1;;;7020:706::o;7733:360::-;;7857:2;7845:9;7836:7;7832:23;7828:32;7825:2;;;-1:-1;;7863:12;7825:2;7914:17;7908:24;7952:18;7944:6;7941:30;7938:2;;;-1:-1;;7974:12;7938:2;8004:73;8069:7;8060:6;8049:9;8045:22;8004:73;:::i;8469:292::-;;8598:3;8586:9;8577:7;8573:23;8569:33;8566:2;;;-1:-1;;8605:12;8566:2;3632:20;3647:4;3632:20;:::i;:::-;1104:3;1097:4;1089:6;1085:17;1081:27;1071:2;;-1:-1;;1112:12;1071:2;1165:78;3647:4;1165:78;:::i;:::-;1249:16;1308:17;3647:4;1341:3;1337:27;1366:3;1337:27;1334:36;1331:2;;;-1:-1;;1373:12;1331:2;-1:-1;1393:206;1146:4;1415:1;1412:13;1393:206;;;6172:20;;1486:50;;28648:4;1550:14;;;;1578;;;;1440:1;1433:9;1393:206;;;1397:14;3736:72;3718:16;3711:98;445:3;426:17;1341:3;426:17;422:27;412:2;;-1:-1;;453:12;412:2;506:86;3647:4;506:86;:::i;:::-;598:16;-1:-1;598:16;;-1:-1;657:17;-1:-1;8598:3;686:27;;683:36;-1:-1;680:2;;;-1:-1;;722:12;680:2;-1:-1;742:214;1146:4;764:1;761:13;742:214;;;230:6;217:20;242:41;277:5;242:41;:::i;:::-;835:58;;28648:4;907:14;;;;935;;;;;1440:1;782:9;742:214;;;-1:-1;;28648:4;3883:16;;3876:106;-1:-1;3887:5;8560:201;-1:-1;;;8560:201::o;8768:395::-;;8906:2;8894:9;8885:7;8881:23;8877:32;8874:2;;;-1:-1;;8912:12;8874:2;8970:17;8957:31;9008:18;;9000:6;8997:30;8994:2;;;-1:-1;;9030:12;8994:2;9115:22;;;;8906:2;4151:19;;;4147:30;4144:2;;;-1:-1;;4180:12;4144:2;4208:20;8906:2;4208:20;:::i;:::-;4305:17;4292:31;9008:18;4335:6;4332:30;4329:2;;;-1:-1;;4365:12;4329:2;4410:58;4464:3;4455:6;4444:9;4440:22;4410:58;:::i;:::-;4385:84;;-1:-1;4392:16;8868:295;-1:-1;;;;;8868:295::o;9170:389::-;;9305:2;9293:9;9284:7;9280:23;9276:32;9273:2;;;-1:-1;;9311:12;9273:2;9369:17;9356:31;9407:18;;9399:6;9396:30;9393:2;;;-1:-1;;9429:12;9393:2;9526:6;9515:9;9511:22;;;4653:6;;4641:9;4636:3;4632:19;4628:32;4625:2;;;-1:-1;;4663:12;4625:2;4691:22;4653:6;4691:22;:::i;:::-;4682:31;;4790:17;4777:31;9407:18;4820:6;4817:30;4814:2;;;-1:-1;;4850:12;4814:2;4895:58;4949:3;4940:6;4929:9;4925:22;4895:58;:::i;:::-;4877:16;4870:84;;5053:49;5098:3;9305:2;5078:9;5074:22;5053:49;:::i;:::-;9305:2;5039:5;5035:16;5028:75;5202:49;5247:3;5169:2;5227:9;5223:22;5202:49;:::i;:::-;5169:2;5188:5;5184:16;5177:75;5313:2;5371:9;5367:22;1680:20;5313:2;5332:5;5328:16;5321:75;5458:3;5517:9;5513:22;6172:20;5458:3;5478:5;5474:16;5467:75;5602:3;5661:9;5657:22;6172:20;5602:3;5622:5;5618:16;5611:75;5783:49;5828:3;5749;5808:9;5804:22;5783:49;:::i;:::-;5749:3;5769:5;5765:16;5758:75;5926:3;5915:9;5911:19;5898:33;9407:18;5943:6;5940:30;5937:2;;;-1:-1;;5973:12;5937:2;6018:58;6072:3;6063:6;6052:9;6048:22;6018:58;:::i;:::-;5926:3;6000:16;;5993:84;-1:-1;6004:5;9267:292;-1:-1;;;;;9267:292::o;12038:323::-;;12170:5;30124:12;30919:6;30914:3;30907:19;12253:52;12298:6;30956:4;30951:3;30947:14;30956:4;12279:5;12275:16;12253:52;:::i;:::-;32900:7;32884:14;-1:-1;;32880:28;12317:39;;;;30956:4;12317:39;;12118:243;-1:-1;;12118:243::o;20407:520::-;16857:66;16837:87;;16821:2;16943:12;;11830:37;;;;20890:12;;;20624:303::o;20934:210::-;31904:13;;31897:21;11713:34;;21055:2;21040:18;;21026:118::o;21151:548::-;11830:37;;;32287:4;32276:16;;;;21519:2;21504:18;;20360:35;21602:2;21587:18;;11830:37;21685:2;21670:18;;11830:37;21358:3;21343:19;;21329:370::o;21706:306::-;;21851:2;21872:17;21865:47;21926:76;21851:2;21840:9;21836:18;21988:6;21926:76;:::i;:::-;21918:84;21822:190;-1:-1;;;21822:190::o;22336:416::-;22536:2;22550:47;;;13631:2;22521:18;;;30907:19;13667:26;30947:14;;;13647:47;13713:12;;;22507:245::o;22759:416::-;22959:2;22973:47;;;13964:2;22944:18;;;30907:19;14000:33;30947:14;;;13980:54;14053:12;;;22930:245::o;23182:416::-;23382:2;23396:47;;;14304:2;23367:18;;;30907:19;14340:25;30947:14;;;14320:46;14385:12;;;23353:245::o;23605:416::-;23805:2;23819:47;;;14636:2;23790:18;;;30907:19;14672:34;30947:14;;;14652:55;-1:-1;;;14727:12;;;14720:26;14765:12;;;23776:245::o;24028:416::-;24228:2;24242:47;;;15016:2;24213:18;;;30907:19;15052:33;30947:14;;;15032:54;15105:12;;;24199:245::o;24451:416::-;24651:2;24665:47;;;15356:2;24636:18;;;30907:19;15392:32;30947:14;;;15372:53;15444:12;;;24622:245::o;24874:416::-;25074:2;25088:47;;;15695:2;25059:18;;;30907:19;15731:34;30947:14;;;15711:55;-1:-1;;;15786:12;;;15779:26;15824:12;;;25045:245::o;25297:416::-;25497:2;25511:47;;;16075:2;25482:18;;;30907:19;16111:34;30947:14;;;16091:55;-1:-1;;;16166:12;;;16159:27;16205:12;;;25468:245::o;25720:416::-;25920:2;25934:47;;;16456:2;25905:18;;;30907:19;-1:-1;;;30947:14;;;16472:43;16534:12;;;25891:245::o;26143:416::-;26343:2;26357:47;;;17194:2;26328:18;;;30907:19;-1:-1;;;30947:14;;;17210:44;17273:12;;;26314:245::o;26566:416::-;26766:2;26780:47;;;17524:2;26751:18;;;30907:19;17560:33;30947:14;;;17540:54;17613:12;;;26737:245::o;26989:323::-;17889:23;;27166:3;27151:19;;;27155:9;26989:323;11370:258;29901:4;11392:1;11389:13;11370:258;;;11456:13;;11830:37;;9943:4;30389:14;;;;9934;;;;11417:1;11410:9;11370:258;;;11374:14;;;9943:4;;18097:5;18093:16;18087:23;18235:4;18230:3;18226:14;11385:1;10665:282;29901:4;10687:1;10684:13;10665:282;;;10751:13;;-1:-1;;;;;32071:54;10039:45;;30389:14;;;;9752;;;;1956:18;10705:9;10665:282;;;10669:14;;;;27137:175;;;;:::o;27319:414::-;;27518:2;27539:17;27532:47;18575:16;18569:23;18503:4;27518:2;27507:9;27503:18;18605:38;18658:73;18494:14;27507:9;18494:14;18712:12;18658:73;:::i;:::-;18650:81;;1956:18;;32082:42;;;27518:2;18815:5;18811:16;18805:23;32071:54;18882:14;27507:9;18882:14;10039:45;18882:14;18978:5;18974:16;18968:23;32900:7;;19027:14;27507:9;19031:4;19027:14;;19011;27507:9;19011:14;19004:38;19057:73;19125:4;19111:12;19057:73;:::i;:::-;19049:81;;19011:14;19220:5;19216:16;19210:23;19190:43;;19027:14;27507:9;19273:4;19269:14;;19253;27507:9;19253:14;19246:38;19299:73;19367:4;19353:12;19299:73;:::i;:::-;19291:81;;19253:14;19459:5;19455:16;19449:23;19429:43;;19027:14;27507:9;19512:4;19508:14;;18503:4;27507:9;19492:14;19485:38;;19538:71;19604:4;19590:12;19538:71;:::i;:::-;27585:138;27489:244;-1:-1;;;;;27489:244::o;27740:406::-;;27935:2;27956:17;27949:47;19984:16;19978:23;27935:2;;27924:9;27920:18;20014:38;20067:71;19889:14;27924:9;19889:14;20119:12;20067:71;:::i;28153:256::-;28215:2;28209:9;28241:17;;;28316:18;28301:34;;28337:22;;;28298:62;28295:2;;;28373:1;;28363:12;28295:2;28215;28382:22;28193:216;;-1:-1;28193:216::o;28926:321::-;;29069:18;29061:6;29058:30;29055:2;;;-1:-1;;29091:12;29055:2;-1:-1;32900:7;29145:17;-1:-1;;29141:33;29232:4;29222:15;;28992:255::o;32459:268::-;32524:1;32531:101;32545:6;32542:1;32539:13;32531:101;;;32612:11;;;32606:18;32593:11;;;32586:39;32567:2;32560:10;32531:101;;;32647:6;32644:1;32641:13;32638:2;;;32524:1;32703:6;32698:3;32694:16;32687:27;32638:2;;32508:219;;;:::o;32921:117::-;-1:-1;;;;;32071:54;;32980:35;;32970:2;;33029:1;;33019:12;32970:2;32964:74;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "941400",
                "executionCost": "981",
                "totalCost": "942381"
              },
              "external": {
                "EncodedCancel()": "infinite",
                "Name()": "infinite",
                "ResolverEncoding()": "infinite",
                "StateEncoding()": "infinite",
                "create(bytes,bytes)": "infinite",
                "getRegistryInformation()": "infinite",
                "resolve(bytes,bytes,bytes)": "infinite"
              }
            },
            "methodIdentifiers": {
              "EncodedCancel()": "0528aa1c",
              "Name()": "8052474d",
              "ResolverEncoding()": "3722aff9",
              "StateEncoding()": "8de8b77e",
              "create(bytes,bytes)": "94184ba9",
              "getRegistryInformation()": "206162be",
              "resolve(bytes,bytes,bytes)": "8ef98a7e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EncodedCancel\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ResolverEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"StateEncoding\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedState\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegistryInformation\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedBalance\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"encodedResolver\",\"type\":\"bytes\"}],\"name\":\"resolve\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"amount\",\"type\":\"uint256[2]\"},{\"internalType\":\"address payable[2]\",\"name\":\"to\",\"type\":\"address[2]\"}],\"internalType\":\"struct Balance\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Withdraw\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This contract burns the initiator's funds if a mutually signed         withdraw commitment can be generated\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/transferDefinitions/Withdraw.sol\":\"Withdraw\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        // Check the signature length\\n        if (signature.length != 65) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        }\\n\\n        // Divide the signature in r, s and v variables\\n        bytes32 r;\\n        bytes32 s;\\n        uint8 v;\\n\\n        // ecrecover takes the signature parameters, and the only way to get them\\n        // currently is to use assembly.\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            r := mload(add(signature, 0x20))\\n            s := mload(add(signature, 0x40))\\n            v := byte(0, mload(add(signature, 0x60)))\\n        }\\n\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n\\n        if (v != 27 && v != 28) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n        return signer;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * replicates the behavior of the\\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n     * JSON-RPC method.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xf25c49d2be2d28918ae6de7e9724238367dabe50631ec8fd23d1cdae2cb70262\",\"license\":\"MIT\"},\"src.sol/interfaces/ITransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./ITransferRegistry.sol\\\";\\nimport \\\"./Types.sol\\\";\\n\\ninterface ITransferDefinition {\\n    // Validates the initial state of the transfer.\\n    // Called by validator.ts during `create` updates.\\n    function create(bytes calldata encodedBalance, bytes calldata)\\n        external\\n        view\\n        returns (bool);\\n\\n    // Performs a state transition to resolve a transfer and returns final balances.\\n    // Called by validator.ts during `resolve` updates.\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata,\\n        bytes calldata\\n    ) external view returns (Balance memory);\\n\\n    // Should also have the following properties:\\n    // string public constant override Name = \\\"...\\\";\\n    // string public constant override StateEncoding = \\\"...\\\";\\n    // string public constant override ResolverEncoding = \\\"...\\\";\\n    // These properties are included on the transfer specifically\\n    // to make it easier for implementers to add new transfers by\\n    // only include a `.sol` file\\n    function Name() external view returns (string memory);\\n\\n    function StateEncoding() external view returns (string memory);\\n\\n    function ResolverEncoding() external view returns (string memory);\\n\\n    function EncodedCancel() external view returns (bytes memory);\\n\\n    function getRegistryInformation()\\n        external\\n        view\\n        returns (RegisteredTransfer memory);\\n}\\n\",\"keccak256\":\"0xd8eef575aa791b187397c9096e6cf40431b590d3999f0a80e38f3e59f4cf4764\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/Types.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nstruct Balance {\\n    uint256[2] amount; // [alice, bob] in channel, [initiator, responder] in transfer\\n    address payable[2] to; // [alice, bob] in channel, [initiator, responder] in transfer\\n}\\n\",\"keccak256\":\"0xf8c71b155b630cde965f5d1db5f0d2751a9763f5a797f15d946613e9224f1046\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibChannelCrypto.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/cryptography/ECDSA.sol\\\";\\n\\t\\t\\n/// @author Connext <support@connext.network>\\t\\t\\n/// @notice This library contains helpers for recovering signatures from a\\t\\t\\n///         Vector commitments. Channels do not allow for arbitrary signing of\\t\\t\\n///         messages to prevent misuse of private keys by injected providers,\\t\\t\\n///         and instead only sign messages with a Vector channel prefix.\\nlibrary LibChannelCrypto {\\n    function checkSignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverChannelMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toChannelSignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toChannelSignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x16Vector Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    function checkUtilitySignature(\\n        bytes32 hash,\\n        bytes memory signature,\\n        address allegedSigner\\n    ) internal pure returns (bool) {\\n        return recoverChannelMessageSigner(hash, signature) == allegedSigner;\\n    }\\n\\n    function recoverUtilityMessageSigner(bytes32 hash, bytes memory signature)\\n        internal\\n        pure\\n        returns (address)\\n    {\\n        bytes32 digest = toUtilitySignedMessage(hash);\\n        return ECDSA.recover(digest, signature);\\n    }\\n\\n    function toUtilitySignedMessage(bytes32 hash)\\n        internal\\n        pure\\n        returns (bytes32)\\n    {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return\\n            keccak256(abi.encodePacked(\\\"\\\\x17Utility Signed Message:\\\\n32\\\", hash));\\n    }\\n}\\n\",\"keccak256\":\"0xb8aa3679b75f2a1a5785f614f5dff9a76a689c18caa56a8df1f4e3c3167d6ece\",\"license\":\"UNLICENSED\"},\"src.sol/transferDefinitions/TransferDefinition.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferDefinition.sol\\\";\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title TransferDefinition\\n/// @author Connext <support@connext.network>\\n/// @notice This contract helps reduce boilerplate needed when creating\\n///         new transfer definitions by providing an implementation of\\n///         the required getter\\n\\nabstract contract TransferDefinition is ITransferDefinition {\\n    function getRegistryInformation()\\n        external\\n        view\\n        override\\n        returns (RegisteredTransfer memory)\\n    {\\n        return\\n            RegisteredTransfer({\\n                name: this.Name(),\\n                stateEncoding: this.StateEncoding(),\\n                resolverEncoding: this.ResolverEncoding(),\\n                definition: address(this),\\n                encodedCancel: this.EncodedCancel()\\n            });\\n    }\\n}\\n\",\"keccak256\":\"0xdb8bcb3fadd5c514bc6585b0a48d66952570bbb1a62f18b9dc9a4f693dc11c5e\",\"license\":\"UNLICENSED\"},\"src.sol/transferDefinitions/Withdraw.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./TransferDefinition.sol\\\";\\nimport \\\"../lib/LibChannelCrypto.sol\\\";\\n\\n/// @title Withdraw\\n/// @author Connext <support@connext.network>\\n/// @notice This contract burns the initiator's funds if a mutually signed\\n///         withdraw commitment can be generated\\n\\ncontract Withdraw is TransferDefinition {\\n    using LibChannelCrypto for bytes32;\\n\\n    struct TransferState {\\n        bytes initiatorSignature;\\n        address initiator;\\n        address responder;\\n        bytes32 data;\\n        uint256 nonce; // included so that each withdraw commitment has a unique hash\\n        uint256 fee;\\n        address callTo;\\n        bytes callData;\\n    }\\n\\n    struct TransferResolver {\\n        bytes responderSignature;\\n    }\\n\\n    // Provide registry information\\n    string public constant override Name = \\\"Withdraw\\\";\\n    string public constant override StateEncoding =\\n        \\\"tuple(bytes initiatorSignature, address initiator, address responder, bytes32 data, uint256 nonce, uint256 fee, address callTo, bytes callData)\\\";\\n    string public constant override ResolverEncoding =\\n        \\\"tuple(bytes responderSignature)\\\";\\n\\n    function EncodedCancel() external pure override returns(bytes memory) {\\n      TransferResolver memory resolver;\\n      resolver.responderSignature = new bytes(65);\\n      return abi.encode(resolver);\\n    }\\n\\n    function create(bytes calldata encodedBalance, bytes calldata encodedState)\\n        external\\n        pure\\n        override\\n        returns (bool)\\n    {\\n        // Get unencoded information\\n        TransferState memory state = abi.decode(encodedState, (TransferState));\\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\\n\\n        require(balance.amount[1] == 0, \\\"Withdraw: NONZERO_RECIPIENT_BALANCE\\\");\\n        require(\\n            state.initiator != address(0) && state.responder != address(0),\\n            \\\"Withdraw: EMPTY_SIGNERS\\\"\\n        );\\n        require(state.data != bytes32(0), \\\"Withdraw: EMPTY_DATA\\\");\\n        require(state.nonce != uint256(0), \\\"Withdraw: EMPTY_NONCE\\\");\\n        require(\\n            state.fee <= balance.amount[0],\\n            \\\"Withdraw: INSUFFICIENT_BALANCE\\\"\\n        );\\n        require(\\n            state.data.checkSignature(\\n                state.initiatorSignature,\\n                state.initiator\\n            ),\\n            \\\"Withdraw: INVALID_INITIATOR_SIG\\\"\\n        );\\n        \\n        // Valid initial transfer state\\n        return true;\\n    }\\n\\n    function resolve(\\n        bytes calldata encodedBalance,\\n        bytes calldata encodedState,\\n        bytes calldata encodedResolver\\n    ) external pure override returns (Balance memory) {\\n        TransferState memory state = abi.decode(encodedState, (TransferState));\\n        TransferResolver memory resolver =\\n            abi.decode(encodedResolver, (TransferResolver));\\n        Balance memory balance = abi.decode(encodedBalance, (Balance));\\n\\n        // Allow for a withdrawal to be canceled if an empty signature is \\n        // passed in. Should have *specific* cancellation action, not just\\n        // any invalid sig\\n        bytes memory b = new bytes(65);\\n        if (keccak256(resolver.responderSignature) == keccak256(b)) {\\n            // Withdraw should be cancelled, no state manipulation needed\\n        } else {\\n            require(\\n                state.data.checkSignature(\\n                    resolver.responderSignature,\\n                    state.responder\\n                ),\\n                \\\"Withdraw: INVALID_RESPONDER_SIG\\\"\\n            );\\n            // Reduce withdraw amount by optional fee\\n            // It's up to the offchain validators to ensure that the withdraw commitment takes this fee into account\\n            balance.amount[1] = state.fee;\\n            balance.amount[0] = 0;\\n        }\\n\\n        return balance;\\n    }\\n}\\n\",\"keccak256\":\"0x012e5deb93a2d67452884dff9179274801a30abf2455833eb4c59a42a87c50b0\",\"license\":\"UNLICENSED\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "This contract burns the initiator's funds if a mutually signed         withdraw commitment can be generated",
            "version": 1
          }
        }
      }
    },
    "sources": {
      "@openzeppelin/contracts/GSN/Context.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
          "exportedSymbols": {
            "Context": [
              22
            ]
          },
          "id": 23,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:0"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 22,
              "linearizedBaseContracts": [
                22
              ],
              "name": "Context",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 9,
                    "nodeType": "Block",
                    "src": "660:34:0",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 6,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "677:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "677:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 5,
                        "id": 8,
                        "nodeType": "Return",
                        "src": "670:17:0"
                      }
                    ]
                  },
                  "id": 10,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "609:2:0"
                  },
                  "returnParameters": {
                    "id": 5,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 10,
                        "src": "643:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 3,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "643:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "642:17:0"
                  },
                  "scope": 22,
                  "src": "590:104:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 20,
                    "nodeType": "Block",
                    "src": "765:165:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 15,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "775:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Context_$22",
                            "typeString": "contract Context"
                          }
                        },
                        "id": 16,
                        "nodeType": "ExpressionStatement",
                        "src": "775:4:0"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 17,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "915:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 18,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "915:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 14,
                        "id": 19,
                        "nodeType": "Return",
                        "src": "908:15:0"
                      }
                    ]
                  },
                  "id": 21,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "717:2:0"
                  },
                  "returnParameters": {
                    "id": 14,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 21,
                        "src": "751:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 12,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "751:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "750:14:0"
                  },
                  "scope": 22,
                  "src": "700:230:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 23,
              "src": "558:374:0"
            }
          ],
          "src": "33:900:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts/access/Ownable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
          "exportedSymbols": {
            "Ownable": [
              131
            ]
          },
          "id": 132,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 24,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:1"
            },
            {
              "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
              "file": "../GSN/Context.sol",
              "id": 25,
              "nodeType": "ImportDirective",
              "scope": 132,
              "sourceUnit": 23,
              "src": "58:28:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 27,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22,
                    "src": "602:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$22",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 28,
                  "nodeType": "InheritanceSpecifier",
                  "src": "602:7:1"
                }
              ],
              "contractDependencies": [
                22
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 26,
                "nodeType": "StructuredDocumentation",
                "src": "87:494:1",
                "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."
              },
              "fullyImplemented": true,
              "id": 131,
              "linearizedBaseContracts": [
                131,
                22
              ],
              "name": "Ownable",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 30,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 131,
                  "src": "616:22:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 29,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "616:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "id": 36,
                  "name": "OwnershipTransferred",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 32,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "previousOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 36,
                        "src": "672:29:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 31,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "672:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 34,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 36,
                        "src": "703:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "671:57:1"
                  },
                  "src": "645:84:1"
                },
                {
                  "body": {
                    "id": 57,
                    "nodeType": "Block",
                    "src": "846:135:1",
                    "statements": [
                      {
                        "assignments": [
                          41
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 41,
                            "mutability": "mutable",
                            "name": "msgSender",
                            "nodeType": "VariableDeclaration",
                            "scope": 57,
                            "src": "856:17:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 40,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "856:7:1",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 44,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 42,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "876:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                              "typeString": "function () view returns (address payable)"
                            }
                          },
                          "id": 43,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "876:12:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "856:32:1"
                      },
                      {
                        "expression": {
                          "id": 47,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 45,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30,
                            "src": "898:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 46,
                            "name": "msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 41,
                            "src": "907:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "898:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 48,
                        "nodeType": "ExpressionStatement",
                        "src": "898:18:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 52,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "960:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 51,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "952:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 50,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "952:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 53,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "952:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 54,
                              "name": "msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 41,
                              "src": "964:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 49,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36,
                            "src": "931:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 55,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "931:43:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 56,
                        "nodeType": "EmitStatement",
                        "src": "926:48:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 37,
                    "nodeType": "StructuredDocumentation",
                    "src": "735:91:1",
                    "text": " @dev Initializes the contract setting the deployer as the initial owner."
                  },
                  "id": 58,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 38,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "843:2:1"
                  },
                  "returnParameters": {
                    "id": 39,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "846:0:1"
                  },
                  "scope": 131,
                  "src": "831:150:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 66,
                    "nodeType": "Block",
                    "src": "1104:30:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 64,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30,
                          "src": "1121:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 63,
                        "id": 65,
                        "nodeType": "Return",
                        "src": "1114:13:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "987:65:1",
                    "text": " @dev Returns the address of the current owner."
                  },
                  "functionSelector": "8da5cb5b",
                  "id": 67,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 60,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1071:2:1"
                  },
                  "returnParameters": {
                    "id": 63,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 62,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 67,
                        "src": "1095:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 61,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1095:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1094:9:1"
                  },
                  "scope": 131,
                  "src": "1057:77:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 79,
                    "nodeType": "Block",
                    "src": "1243:95:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 74,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 71,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30,
                                "src": "1261:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 72,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10,
                                  "src": "1271:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                    "typeString": "function () view returns (address payable)"
                                  }
                                },
                                "id": 73,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1271:12:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "1261:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                              "id": 75,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1285:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                                "typeString": "literal_string \"Ownable: caller is not the owner\""
                              },
                              "value": "Ownable: caller is not the owner"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                                "typeString": "literal_string \"Ownable: caller is not the owner\""
                              }
                            ],
                            "id": 70,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1253:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 76,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1253:67:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 77,
                        "nodeType": "ExpressionStatement",
                        "src": "1253:67:1"
                      },
                      {
                        "id": 78,
                        "nodeType": "PlaceholderStatement",
                        "src": "1330:1:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "1140:77:1",
                    "text": " @dev Throws if called by any account other than the owner."
                  },
                  "id": 80,
                  "name": "onlyOwner",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 69,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1240:2:1"
                  },
                  "src": "1222:116:1",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 101,
                    "nodeType": "Block",
                    "src": "1734:91:1",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 87,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "1770:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 90,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1786:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 89,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1778:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 88,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1778:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 91,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1778:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 86,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36,
                            "src": "1749:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 92,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1749:40:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 93,
                        "nodeType": "EmitStatement",
                        "src": "1744:45:1"
                      },
                      {
                        "expression": {
                          "id": 99,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 94,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30,
                            "src": "1799:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 97,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1816:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 96,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1808:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 95,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1808:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 98,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1808:10:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1799:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 100,
                        "nodeType": "ExpressionStatement",
                        "src": "1799:19:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 81,
                    "nodeType": "StructuredDocumentation",
                    "src": "1344:331:1",
                    "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."
                  },
                  "functionSelector": "715018a6",
                  "id": 102,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 84,
                      "modifierName": {
                        "id": 83,
                        "name": "onlyOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "1724:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1724:9:1"
                    }
                  ],
                  "name": "renounceOwnership",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 82,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1706:2:1"
                  },
                  "returnParameters": {
                    "id": 85,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1734:0:1"
                  },
                  "scope": 131,
                  "src": "1680:145:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 129,
                    "nodeType": "Block",
                    "src": "2044:170:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 116,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 111,
                                "name": "newOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 105,
                                "src": "2062:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 114,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2082:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 113,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2074:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 112,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2074:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2074:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "2062:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373",
                              "id": 117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2086:40:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
                                "typeString": "literal_string \"Ownable: new owner is the zero address\""
                              },
                              "value": "Ownable: new owner is the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
                                "typeString": "literal_string \"Ownable: new owner is the zero address\""
                              }
                            ],
                            "id": 110,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2054:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2054:73:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 119,
                        "nodeType": "ExpressionStatement",
                        "src": "2054:73:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 121,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "2163:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 122,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 105,
                              "src": "2171:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 120,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36,
                            "src": "2142:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2142:38:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 124,
                        "nodeType": "EmitStatement",
                        "src": "2137:43:1"
                      },
                      {
                        "expression": {
                          "id": 127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 125,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30,
                            "src": "2190:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 126,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 105,
                            "src": "2199:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2190:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 128,
                        "nodeType": "ExpressionStatement",
                        "src": "2190:17:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 103,
                    "nodeType": "StructuredDocumentation",
                    "src": "1831:138:1",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."
                  },
                  "functionSelector": "f2fde38b",
                  "id": 130,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 108,
                      "modifierName": {
                        "id": 107,
                        "name": "onlyOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "2034:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2034:9:1"
                    }
                  ],
                  "name": "transferOwnership",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 105,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 130,
                        "src": "2001:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2001:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2000:18:1"
                  },
                  "returnParameters": {
                    "id": 109,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2044:0:1"
                  },
                  "scope": 131,
                  "src": "1974:240:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 132,
              "src": "582:1634:1"
            }
          ],
          "src": "33:2184:1"
        },
        "id": 1
      },
      "@openzeppelin/contracts/cryptography/ECDSA.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
          "exportedSymbols": {
            "ECDSA": [
              229
            ]
          },
          "id": 230,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 133,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:2"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 134,
                "nodeType": "StructuredDocumentation",
                "src": "58:205:2",
                "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."
              },
              "fullyImplemented": true,
              "id": 229,
              "linearizedBaseContracts": [
                229
              ],
              "name": "ECDSA",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 210,
                    "nodeType": "Block",
                    "src": "1151:1981:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 144,
                              "name": "signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 139,
                              "src": "1203:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 145,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1203:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "3635",
                            "id": 146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1223:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65_by_1",
                              "typeString": "int_const 65"
                            },
                            "value": "65"
                          },
                          "src": "1203:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 153,
                        "nodeType": "IfStatement",
                        "src": "1199:94:2",
                        "trueBody": {
                          "id": 152,
                          "nodeType": "Block",
                          "src": "1227:66:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                                    "id": 149,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1248:33:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                      "typeString": "literal_string \"ECDSA: invalid signature length\""
                                    },
                                    "value": "ECDSA: invalid signature length"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                      "typeString": "literal_string \"ECDSA: invalid signature length\""
                                    }
                                  ],
                                  "id": 148,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "1241:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1241:41:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 151,
                              "nodeType": "ExpressionStatement",
                              "src": "1241:41:2"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          155
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 155,
                            "mutability": "mutable",
                            "name": "r",
                            "nodeType": "VariableDeclaration",
                            "scope": 210,
                            "src": "1359:9:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 154,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1359:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 156,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1359:9:2"
                      },
                      {
                        "assignments": [
                          158
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 158,
                            "mutability": "mutable",
                            "name": "s",
                            "nodeType": "VariableDeclaration",
                            "scope": 210,
                            "src": "1378:9:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 157,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1378:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 159,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1378:9:2"
                      },
                      {
                        "assignments": [
                          161
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 161,
                            "mutability": "mutable",
                            "name": "v",
                            "nodeType": "VariableDeclaration",
                            "scope": 210,
                            "src": "1397:7:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 160,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "1397:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 162,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1397:7:2"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1603:155:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1617:32:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "signature",
                                        "nodeType": "YulIdentifier",
                                        "src": "1632:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1643:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1628:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1628:20:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1622:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1622:27:2"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "1617:1:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1662:32:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "signature",
                                        "nodeType": "YulIdentifier",
                                        "src": "1677:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1688:4:2",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1673:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1673:20:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1667:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1667:27:2"
                              },
                              "variableNames": [
                                {
                                  "name": "s",
                                  "nodeType": "YulIdentifier",
                                  "src": "1662:1:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1707:41:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1717:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "signature",
                                            "nodeType": "YulIdentifier",
                                            "src": "1730:9:2"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1741:4:2",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1726:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1726:20:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1720:5:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1720:27:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "byte",
                                  "nodeType": "YulIdentifier",
                                  "src": "1712:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1712:36:2"
                              },
                              "variableNames": [
                                {
                                  "name": "v",
                                  "nodeType": "YulIdentifier",
                                  "src": "1707:1:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 155,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1617:1:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 158,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1662:1:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 139,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1632:9:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 139,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1677:9:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 139,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1730:9:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 161,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1707:1:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 163,
                        "nodeType": "InlineAssembly",
                        "src": "1594:164:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 166,
                                "name": "s",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 158,
                                "src": "2654:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 165,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2646:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 164,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2646:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2646:10:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                            "id": 168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2659:66:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
                              "typeString": "int_const 5789...(69 digits omitted)...7168"
                            },
                            "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                          },
                          "src": "2646:79:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 175,
                        "nodeType": "IfStatement",
                        "src": "2642:154:2",
                        "trueBody": {
                          "id": 174,
                          "nodeType": "Block",
                          "src": "2727:69:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c7565",
                                    "id": 171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2748:36:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                      "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                                    },
                                    "value": "ECDSA: invalid signature 's' value"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                      "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                                    }
                                  ],
                                  "id": 170,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "2741:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2741:44:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 173,
                              "nodeType": "ExpressionStatement",
                              "src": "2741:44:2"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 176,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 161,
                              "src": "2810:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "3237",
                              "id": 177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2815:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_27_by_1",
                                "typeString": "int_const 27"
                              },
                              "value": "27"
                            },
                            "src": "2810:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 179,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 161,
                              "src": "2821:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "3238",
                              "id": 180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2826:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_28_by_1",
                                "typeString": "int_const 28"
                              },
                              "value": "28"
                            },
                            "src": "2821:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2810:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 188,
                        "nodeType": "IfStatement",
                        "src": "2806:93:2",
                        "trueBody": {
                          "id": 187,
                          "nodeType": "Block",
                          "src": "2830:69:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c7565",
                                    "id": 184,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2851:36:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                      "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                                    },
                                    "value": "ECDSA: invalid signature 'v' value"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                      "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                                    }
                                  ],
                                  "id": 183,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "2844:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 185,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2844:44:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 186,
                              "nodeType": "ExpressionStatement",
                              "src": "2844:44:2"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          190
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 190,
                            "mutability": "mutable",
                            "name": "signer",
                            "nodeType": "VariableDeclaration",
                            "scope": 210,
                            "src": "2993:14:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 189,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2993:7:2",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 197,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 192,
                              "name": "hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 137,
                              "src": "3020:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 193,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 161,
                              "src": "3026:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 194,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 155,
                              "src": "3029:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 195,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 158,
                              "src": "3032:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 191,
                            "name": "ecrecover",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -6,
                            "src": "3010:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                            }
                          },
                          "id": 196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3010:24:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2993:41:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 204,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 199,
                                "name": "signer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 190,
                                "src": "3052:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 202,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3070:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 201,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3062:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 200,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3062:7:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 203,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3062:10:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "3052:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                              "id": 205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3074:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                "typeString": "literal_string \"ECDSA: invalid signature\""
                              },
                              "value": "ECDSA: invalid signature"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                "typeString": "literal_string \"ECDSA: invalid signature\""
                              }
                            ],
                            "id": 198,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3044:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3044:57:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 207,
                        "nodeType": "ExpressionStatement",
                        "src": "3044:57:2"
                      },
                      {
                        "expression": {
                          "id": 208,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 190,
                          "src": "3119:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 143,
                        "id": 209,
                        "nodeType": "Return",
                        "src": "3112:13:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 135,
                    "nodeType": "StructuredDocumentation",
                    "src": "284:775:2",
                    "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it."
                  },
                  "id": 211,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recover",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 137,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 211,
                        "src": "1081:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 136,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1081:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 139,
                        "mutability": "mutable",
                        "name": "signature",
                        "nodeType": "VariableDeclaration",
                        "scope": 211,
                        "src": "1095:22:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 138,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1095:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1080:38:2"
                  },
                  "returnParameters": {
                    "id": 143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 142,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 211,
                        "src": "1142:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 141,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1142:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1141:9:2"
                  },
                  "scope": 229,
                  "src": "1064:2068:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 227,
                    "nodeType": "Block",
                    "src": "3474:187:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332",
                                  "id": 222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3612:34:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                    "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\""
                                  },
                                  "value": "\u0019Ethereum Signed Message:\n32"
                                },
                                {
                                  "id": 223,
                                  "name": "hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 214,
                                  "src": "3648:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                    "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\""
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 220,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3595:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "3595:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3595:58:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 219,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "3585:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3585:69:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 218,
                        "id": 226,
                        "nodeType": "Return",
                        "src": "3578:76:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 212,
                    "nodeType": "StructuredDocumentation",
                    "src": "3138:253:2",
                    "text": " @dev Returns an Ethereum Signed Message, created from a `hash`. This\n replicates the behavior of the\n https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n JSON-RPC method.\n See {recover}."
                  },
                  "id": 228,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toEthSignedMessageHash",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 214,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 228,
                        "src": "3428:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 213,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3428:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3427:14:2"
                  },
                  "returnParameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 217,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 228,
                        "src": "3465:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3465:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3464:9:2"
                  },
                  "scope": 229,
                  "src": "3396:265:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 230,
              "src": "264:3399:2"
            }
          ],
          "src": "33:3631:2"
        },
        "id": 2
      },
      "@openzeppelin/contracts/cryptography/MerkleProof.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/cryptography/MerkleProof.sol",
          "exportedSymbols": {
            "MerkleProof": [
              300
            ]
          },
          "id": 301,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 231,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:3"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 232,
                "nodeType": "StructuredDocumentation",
                "src": "58:84:3",
                "text": " @dev These functions deal with verification of Merkle trees (hash trees),"
              },
              "fullyImplemented": true,
              "id": 300,
              "linearizedBaseContracts": [
                300
              ],
              "name": "MerkleProof",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 298,
                    "nodeType": "Block",
                    "src": "594:682:3",
                    "statements": [
                      {
                        "assignments": [
                          246
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 246,
                            "mutability": "mutable",
                            "name": "computedHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 298,
                            "src": "604:20:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 245,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "604:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 248,
                        "initialValue": {
                          "id": 247,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 240,
                          "src": "627:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "604:27:3"
                      },
                      {
                        "body": {
                          "id": 292,
                          "nodeType": "Block",
                          "src": "685:472:3",
                          "statements": [
                            {
                              "assignments": [
                                261
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 261,
                                  "mutability": "mutable",
                                  "name": "proofElement",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 292,
                                  "src": "699:20:3",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 260,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "699:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 265,
                              "initialValue": {
                                "baseExpression": {
                                  "id": 262,
                                  "name": "proof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 236,
                                  "src": "722:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                },
                                "id": 264,
                                "indexExpression": {
                                  "id": 263,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 250,
                                  "src": "728:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "722:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "699:31:3"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 268,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 266,
                                  "name": "computedHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 246,
                                  "src": "749:12:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 267,
                                  "name": "proofElement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 261,
                                  "src": "765:12:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "749:28:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 290,
                                "nodeType": "Block",
                                "src": "966:181:3",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 288,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 280,
                                        "name": "computedHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 246,
                                        "src": "1062:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "id": 284,
                                                "name": "proofElement",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 261,
                                                "src": "1104:12:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              },
                                              {
                                                "id": 285,
                                                "name": "computedHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 246,
                                                "src": "1118:12:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              ],
                                              "expression": {
                                                "id": 282,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "1087:3:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_abi",
                                                  "typeString": "abi"
                                                }
                                              },
                                              "id": 283,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberName": "encodePacked",
                                              "nodeType": "MemberAccess",
                                              "src": "1087:16:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                              }
                                            },
                                            "id": 286,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1087:44:3",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "id": 281,
                                          "name": "keccak256",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -8,
                                          "src": "1077:9:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 287,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1077:55:3",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "1062:70:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 289,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1062:70:3"
                                  }
                                ]
                              },
                              "id": 291,
                              "nodeType": "IfStatement",
                              "src": "745:402:3",
                              "trueBody": {
                                "id": 279,
                                "nodeType": "Block",
                                "src": "779:181:3",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 277,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 269,
                                        "name": "computedHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 246,
                                        "src": "875:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "id": 273,
                                                "name": "computedHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 246,
                                                "src": "917:12:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              },
                                              {
                                                "id": 274,
                                                "name": "proofElement",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 261,
                                                "src": "931:12:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              ],
                                              "expression": {
                                                "id": 271,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "900:3:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_abi",
                                                  "typeString": "abi"
                                                }
                                              },
                                              "id": 272,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberName": "encodePacked",
                                              "nodeType": "MemberAccess",
                                              "src": "900:16:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                              }
                                            },
                                            "id": 275,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "900:44:3",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "id": 270,
                                          "name": "keccak256",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -8,
                                          "src": "890:9:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 276,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "890:55:3",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "875:70:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 278,
                                    "nodeType": "ExpressionStatement",
                                    "src": "875:70:3"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 253,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 250,
                            "src": "662:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 254,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 236,
                              "src": "666:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "666:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "662:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 293,
                        "initializationExpression": {
                          "assignments": [
                            250
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 250,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 293,
                              "src": "647:9:3",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 249,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "647:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 252,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "659:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "647:13:3"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 258,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "680:3:3",
                            "subExpression": {
                              "id": 257,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 250,
                              "src": "680:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 259,
                          "nodeType": "ExpressionStatement",
                          "src": "680:3:3"
                        },
                        "nodeType": "ForStatement",
                        "src": "642:515:3"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 294,
                            "name": "computedHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 246,
                            "src": "1249:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 295,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 238,
                            "src": "1265:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1249:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 244,
                        "id": 297,
                        "nodeType": "Return",
                        "src": "1242:27:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 233,
                    "nodeType": "StructuredDocumentation",
                    "src": "169:323:3",
                    "text": " @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree\n defined by `root`. For this, a `proof` must be provided, containing\n sibling hashes on the branch from the leaf to the root of the tree. Each\n pair of leaves and each pair of pre-images are assumed to be sorted."
                  },
                  "id": 299,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verify",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 236,
                        "mutability": "mutable",
                        "name": "proof",
                        "nodeType": "VariableDeclaration",
                        "scope": 299,
                        "src": "513:22:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 234,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "513:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 235,
                          "nodeType": "ArrayTypeName",
                          "src": "513:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 238,
                        "mutability": "mutable",
                        "name": "root",
                        "nodeType": "VariableDeclaration",
                        "scope": 299,
                        "src": "537:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 237,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "537:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 240,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nodeType": "VariableDeclaration",
                        "scope": 299,
                        "src": "551:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 239,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "551:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "512:52:3"
                  },
                  "returnParameters": {
                    "id": 244,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 243,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 299,
                        "src": "588:4:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 242,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "588:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "587:6:3"
                  },
                  "scope": 300,
                  "src": "497:779:3",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 301,
              "src": "143:1135:3"
            }
          ],
          "src": "33:1246:3"
        },
        "id": 3
      },
      "@openzeppelin/contracts/math/Math.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/math/Math.sol",
          "exportedSymbols": {
            "Math": [
              373
            ]
          },
          "id": 374,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 302,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:4"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 303,
                "nodeType": "StructuredDocumentation",
                "src": "58:73:4",
                "text": " @dev Standard math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 373,
              "linearizedBaseContracts": [
                373
              ],
              "name": "Math",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 320,
                    "nodeType": "Block",
                    "src": "282:38:4",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 313,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 306,
                              "src": "299:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "id": 314,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 308,
                              "src": "304:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "299:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 317,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 308,
                            "src": "312:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "299:14:4",
                          "trueExpression": {
                            "id": 316,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 306,
                            "src": "308:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 312,
                        "id": 319,
                        "nodeType": "Return",
                        "src": "292:21:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 304,
                    "nodeType": "StructuredDocumentation",
                    "src": "151:59:4",
                    "text": " @dev Returns the largest of two numbers."
                  },
                  "id": 321,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 306,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 321,
                        "src": "228:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "228:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 308,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 321,
                        "src": "239:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 307,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "239:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "227:22:4"
                  },
                  "returnParameters": {
                    "id": 312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 311,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 321,
                        "src": "273:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 310,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "273:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "272:9:4"
                  },
                  "scope": 373,
                  "src": "215:105:4",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 338,
                    "nodeType": "Block",
                    "src": "458:37:4",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 331,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 324,
                              "src": "475:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 332,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 326,
                              "src": "479:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "475:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 335,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 326,
                            "src": "487:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "475:13:4",
                          "trueExpression": {
                            "id": 334,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 324,
                            "src": "483:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 330,
                        "id": 337,
                        "nodeType": "Return",
                        "src": "468:20:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 322,
                    "nodeType": "StructuredDocumentation",
                    "src": "326:60:4",
                    "text": " @dev Returns the smallest of two numbers."
                  },
                  "id": 339,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 327,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 324,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 339,
                        "src": "404:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "404:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 326,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 339,
                        "src": "415:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "415:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "403:22:4"
                  },
                  "returnParameters": {
                    "id": 330,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 329,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 339,
                        "src": "449:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 328,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "449:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "448:9:4"
                  },
                  "scope": 373,
                  "src": "391:104:4",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 371,
                    "nodeType": "Block",
                    "src": "679:119:4",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 357,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 351,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 349,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 342,
                                    "src": "751:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "hexValue": "32",
                                    "id": 350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "755:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "751:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 352,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "750:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 353,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 344,
                                    "src": "761:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "hexValue": "32",
                                    "id": 354,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "765:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "761:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 356,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "760:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "750:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 364,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 360,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 358,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 342,
                                          "src": "772:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "%",
                                        "rightExpression": {
                                          "hexValue": "32",
                                          "id": 359,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "776:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "src": "772:5:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 363,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 361,
                                          "name": "b",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 344,
                                          "src": "780:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "%",
                                        "rightExpression": {
                                          "hexValue": "32",
                                          "id": 362,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "784:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "src": "780:5:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "772:13:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 365,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "771:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 366,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "789:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "771:19:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 368,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "770:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "750:41:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 348,
                        "id": 370,
                        "nodeType": "Return",
                        "src": "743:48:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 340,
                    "nodeType": "StructuredDocumentation",
                    "src": "501:102:4",
                    "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
                  },
                  "id": 372,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 342,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 372,
                        "src": "625:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 341,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "625:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 344,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 372,
                        "src": "636:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "636:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "624:22:4"
                  },
                  "returnParameters": {
                    "id": 348,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 347,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 372,
                        "src": "670:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 346,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "669:9:4"
                  },
                  "scope": 373,
                  "src": "608:190:4",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 374,
              "src": "132:668:4"
            }
          ],
          "src": "33:768:4"
        },
        "id": 4
      },
      "@openzeppelin/contracts/math/SafeMath.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "exportedSymbols": {
            "SafeMath": [
              569
            ]
          },
          "id": 570,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 375,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 376,
                "nodeType": "StructuredDocumentation",
                "src": "58:563:5",
                "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."
              },
              "fullyImplemented": true,
              "id": 569,
              "linearizedBaseContracts": [
                569
              ],
              "name": "SafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 401,
                    "nodeType": "Block",
                    "src": "941:109:5",
                    "statements": [
                      {
                        "assignments": [
                          387
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 387,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 401,
                            "src": "951:9:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 386,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "951:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 391,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 388,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 379,
                            "src": "963:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 389,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 381,
                            "src": "967:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "963:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "951:17:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 395,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 393,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 387,
                                "src": "986:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 394,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 379,
                                "src": "991:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "986:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "994:29:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              },
                              "value": "SafeMath: addition overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              }
                            ],
                            "id": 392,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "978:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 397,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "978:46:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 398,
                        "nodeType": "ExpressionStatement",
                        "src": "978:46:5"
                      },
                      {
                        "expression": {
                          "id": 399,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 387,
                          "src": "1042:1:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 385,
                        "id": 400,
                        "nodeType": "Return",
                        "src": "1035:8:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 377,
                    "nodeType": "StructuredDocumentation",
                    "src": "645:224:5",
                    "text": " @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."
                  },
                  "id": 402,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 382,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 379,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 402,
                        "src": "887:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 378,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "887:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 381,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 402,
                        "src": "898:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 380,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "898:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "886:22:5"
                  },
                  "returnParameters": {
                    "id": 385,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 384,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 402,
                        "src": "932:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 383,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "932:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "931:9:5"
                  },
                  "scope": 569,
                  "src": "874:176:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 418,
                    "nodeType": "Block",
                    "src": "1388:67:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 413,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 405,
                              "src": "1409:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 414,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 407,
                              "src": "1412:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1415:32:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              },
                              "value": "SafeMath: subtraction overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              }
                            ],
                            "id": 412,
                            "name": "sub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              419,
                              447
                            ],
                            "referencedDeclaration": 447,
                            "src": "1405:3:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1405:43:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 411,
                        "id": 417,
                        "nodeType": "Return",
                        "src": "1398:50:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 403,
                    "nodeType": "StructuredDocumentation",
                    "src": "1056:260:5",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 419,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 408,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 405,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 419,
                        "src": "1334:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 404,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1334:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 407,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 419,
                        "src": "1345:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 406,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1345:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1333:22:5"
                  },
                  "returnParameters": {
                    "id": 411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 410,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 419,
                        "src": "1379:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1379:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1378:9:5"
                  },
                  "scope": 569,
                  "src": "1321:134:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 446,
                    "nodeType": "Block",
                    "src": "1841:92:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 432,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 424,
                                "src": "1859:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 433,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 422,
                                "src": "1864:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1859:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 435,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 426,
                              "src": "1867:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 431,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1851:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1851:29:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 437,
                        "nodeType": "ExpressionStatement",
                        "src": "1851:29:5"
                      },
                      {
                        "assignments": [
                          439
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 439,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 446,
                            "src": "1890:9:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 438,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1890:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 443,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 440,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 422,
                            "src": "1902:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 441,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 424,
                            "src": "1906:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1902:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1890:17:5"
                      },
                      {
                        "expression": {
                          "id": 444,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 439,
                          "src": "1925:1:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 430,
                        "id": 445,
                        "nodeType": "Return",
                        "src": "1918:8:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 420,
                    "nodeType": "StructuredDocumentation",
                    "src": "1461:280:5",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 447,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 422,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 447,
                        "src": "1759:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1759:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 424,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 447,
                        "src": "1770:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 423,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1770:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 426,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 447,
                        "src": "1781:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 425,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1781:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1758:50:5"
                  },
                  "returnParameters": {
                    "id": 430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 429,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 447,
                        "src": "1832:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 428,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1832:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1831:9:5"
                  },
                  "scope": 569,
                  "src": "1746:187:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 481,
                    "nodeType": "Block",
                    "src": "2247:392:5",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 457,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 450,
                            "src": "2479:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 458,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2484:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2479:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 463,
                        "nodeType": "IfStatement",
                        "src": "2475:45:5",
                        "trueBody": {
                          "id": 462,
                          "nodeType": "Block",
                          "src": "2487:33:5",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 460,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2508:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 456,
                              "id": 461,
                              "nodeType": "Return",
                              "src": "2501:8:5"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          465
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 465,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 481,
                            "src": "2530:9:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 464,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2530:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 469,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 466,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 450,
                            "src": "2542:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 467,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 452,
                            "src": "2546:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2542:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2530:17:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 473,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 471,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 465,
                                  "src": "2565:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 472,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 450,
                                  "src": "2569:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2565:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 474,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 452,
                                "src": "2574:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2565:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2577:35:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              },
                              "value": "SafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 470,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2557:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2557:56:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 478,
                        "nodeType": "ExpressionStatement",
                        "src": "2557:56:5"
                      },
                      {
                        "expression": {
                          "id": 479,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 465,
                          "src": "2631:1:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 456,
                        "id": 480,
                        "nodeType": "Return",
                        "src": "2624:8:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 448,
                    "nodeType": "StructuredDocumentation",
                    "src": "1939:236:5",
                    "text": " @dev Returns the multiplication of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."
                  },
                  "id": 482,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 450,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 482,
                        "src": "2193:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 449,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2193:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 452,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 482,
                        "src": "2204:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 451,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2204:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2192:22:5"
                  },
                  "returnParameters": {
                    "id": 456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 455,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 482,
                        "src": "2238:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 454,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2238:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2237:9:5"
                  },
                  "scope": 569,
                  "src": "2180:459:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 498,
                    "nodeType": "Block",
                    "src": "3168:63:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 493,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 485,
                              "src": "3189:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 494,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 487,
                              "src": "3192:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3195:28:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              },
                              "value": "SafeMath: division by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              }
                            ],
                            "id": 492,
                            "name": "div",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              499,
                              527
                            ],
                            "referencedDeclaration": 527,
                            "src": "3185:3:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3185:39:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 491,
                        "id": 497,
                        "nodeType": "Return",
                        "src": "3178:46:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 483,
                    "nodeType": "StructuredDocumentation",
                    "src": "2645:451:5",
                    "text": " @dev Returns the integer division of two unsigned integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 499,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 488,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 485,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 499,
                        "src": "3114:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 484,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3114:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 487,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 499,
                        "src": "3125:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 486,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3125:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3113:22:5"
                  },
                  "returnParameters": {
                    "id": 491,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 490,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 499,
                        "src": "3159:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 489,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3159:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3158:9:5"
                  },
                  "scope": 569,
                  "src": "3101:130:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 526,
                    "nodeType": "Block",
                    "src": "3808:177:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 514,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 512,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 504,
                                "src": "3826:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3830:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "3826:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 515,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 506,
                              "src": "3833:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 511,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3818:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3818:28:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 517,
                        "nodeType": "ExpressionStatement",
                        "src": "3818:28:5"
                      },
                      {
                        "assignments": [
                          519
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 519,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 526,
                            "src": "3856:9:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 518,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3856:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 523,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 520,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 502,
                            "src": "3868:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 521,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 504,
                            "src": "3872:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3868:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3856:17:5"
                      },
                      {
                        "expression": {
                          "id": 524,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 519,
                          "src": "3977:1:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 510,
                        "id": 525,
                        "nodeType": "Return",
                        "src": "3970:8:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 500,
                    "nodeType": "StructuredDocumentation",
                    "src": "3237:471:5",
                    "text": " @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 527,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 507,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 502,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 527,
                        "src": "3726:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 501,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3726:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 504,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 527,
                        "src": "3737:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 503,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3737:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 506,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 527,
                        "src": "3748:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 505,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3748:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3725:50:5"
                  },
                  "returnParameters": {
                    "id": 510,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 509,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 527,
                        "src": "3799:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 508,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3799:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3798:9:5"
                  },
                  "scope": 569,
                  "src": "3713:272:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 543,
                    "nodeType": "Block",
                    "src": "4503:61:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 538,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 530,
                              "src": "4524:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 539,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 532,
                              "src": "4527:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206d6f64756c6f206279207a65726f",
                              "id": 540,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4530:26:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              },
                              "value": "SafeMath: modulo by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              }
                            ],
                            "id": 537,
                            "name": "mod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              544,
                              568
                            ],
                            "referencedDeclaration": 568,
                            "src": "4520:3:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4520:37:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 536,
                        "id": 542,
                        "nodeType": "Return",
                        "src": "4513:44:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 528,
                    "nodeType": "StructuredDocumentation",
                    "src": "3991:440:5",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 544,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 533,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 530,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 544,
                        "src": "4449:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 529,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4449:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 532,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 544,
                        "src": "4460:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 531,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4460:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4448:22:5"
                  },
                  "returnParameters": {
                    "id": 536,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 535,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 544,
                        "src": "4494:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 534,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4494:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4493:9:5"
                  },
                  "scope": 569,
                  "src": "4436:128:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 567,
                    "nodeType": "Block",
                    "src": "5130:68:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 557,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 549,
                                "src": "5148:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 558,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5153:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "5148:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 560,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 551,
                              "src": "5156:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 556,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5140:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5140:29:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 562,
                        "nodeType": "ExpressionStatement",
                        "src": "5140:29:5"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 563,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 547,
                            "src": "5186:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "id": 564,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 549,
                            "src": "5190:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5186:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 555,
                        "id": 566,
                        "nodeType": "Return",
                        "src": "5179:12:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 545,
                    "nodeType": "StructuredDocumentation",
                    "src": "4570:460:5",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts with custom message when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 568,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 552,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 547,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 568,
                        "src": "5048:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 546,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5048:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 549,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 568,
                        "src": "5059:9:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5059:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 551,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 568,
                        "src": "5070:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 550,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5070:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5047:50:5"
                  },
                  "returnParameters": {
                    "id": 555,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 554,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 568,
                        "src": "5121:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 553,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5121:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5120:9:5"
                  },
                  "scope": 569,
                  "src": "5035:163:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 570,
              "src": "622:4578:5"
            }
          ],
          "src": "33:5168:5"
        },
        "id": 5
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "exportedSymbols": {
            "ERC20": [
              1076
            ]
          },
          "id": 1077,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 571,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:6"
            },
            {
              "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
              "file": "../../GSN/Context.sol",
              "id": 572,
              "nodeType": "ImportDirective",
              "scope": 1077,
              "sourceUnit": 23,
              "src": "58:31:6",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "./IERC20.sol",
              "id": 573,
              "nodeType": "ImportDirective",
              "scope": 1077,
              "sourceUnit": 1155,
              "src": "90:22:6",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
              "file": "../../math/SafeMath.sol",
              "id": 574,
              "nodeType": "ImportDirective",
              "scope": 1077,
              "sourceUnit": 570,
              "src": "113:33:6",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
              "file": "../../utils/Address.sol",
              "id": 575,
              "nodeType": "ImportDirective",
              "scope": 1077,
              "sourceUnit": 1359,
              "src": "147:33:6",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 577,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22,
                    "src": "1363:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$22",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 578,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1363:7:6"
                },
                {
                  "baseName": {
                    "id": 579,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1154,
                    "src": "1372:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$1154",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 580,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1372:6:6"
                }
              ],
              "contractDependencies": [
                22,
                1154
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 576,
                "nodeType": "StructuredDocumentation",
                "src": "182:1162:6",
                "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
              },
              "fullyImplemented": true,
              "id": 1076,
              "linearizedBaseContracts": [
                1076,
                1154,
                22
              ],
              "name": "ERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 583,
                  "libraryName": {
                    "id": 581,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 569,
                    "src": "1391:8:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$569",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1385:27:6",
                  "typeName": {
                    "id": 582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1404:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 586,
                  "libraryName": {
                    "id": 584,
                    "name": "Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1358,
                    "src": "1423:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Address_$1358",
                      "typeString": "library Address"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1417:26:6",
                  "typeName": {
                    "id": 585,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 590,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nodeType": "VariableDeclaration",
                  "scope": 1076,
                  "src": "1449:46:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 589,
                    "keyType": {
                      "id": 587,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1458:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1449:28:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 588,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1469:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 596,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nodeType": "VariableDeclaration",
                  "scope": 1076,
                  "src": "1502:69:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 595,
                    "keyType": {
                      "id": 591,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1511:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1502:49:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 594,
                      "keyType": {
                        "id": 592,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1531:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1522:28:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 593,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1542:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 598,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 1076,
                  "src": "1578:28:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 597,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1578:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 600,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1076,
                  "src": "1613:20:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 599,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1613:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 602,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 1076,
                  "src": "1639:22:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 601,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1639:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 604,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 1076,
                  "src": "1667:23:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 603,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1667:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 624,
                    "nodeType": "Block",
                    "src": "2068:79:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 612,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 600,
                            "src": "2078:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 613,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 607,
                            "src": "2086:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2078:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 615,
                        "nodeType": "ExpressionStatement",
                        "src": "2078:12:6"
                      },
                      {
                        "expression": {
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 616,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 602,
                            "src": "2100:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 617,
                            "name": "symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 609,
                            "src": "2110:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2100:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 619,
                        "nodeType": "ExpressionStatement",
                        "src": "2100:16:6"
                      },
                      {
                        "expression": {
                          "id": 622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 620,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 604,
                            "src": "2126:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "3138",
                            "id": 621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2138:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          },
                          "src": "2126:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 623,
                        "nodeType": "ExpressionStatement",
                        "src": "2126:14:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 605,
                    "nodeType": "StructuredDocumentation",
                    "src": "1697:311:6",
                    "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                  },
                  "id": 625,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 610,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 607,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 625,
                        "src": "2026:18:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 606,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2026:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 609,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "scope": 625,
                        "src": "2046:20:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 608,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2046:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2025:42:6"
                  },
                  "returnParameters": {
                    "id": 611,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2068:0:6"
                  },
                  "scope": 1076,
                  "src": "2013:134:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 633,
                    "nodeType": "Block",
                    "src": "2264:29:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 631,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 600,
                          "src": "2281:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 630,
                        "id": 632,
                        "nodeType": "Return",
                        "src": "2274:12:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 626,
                    "nodeType": "StructuredDocumentation",
                    "src": "2153:54:6",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 634,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 627,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2225:2:6"
                  },
                  "returnParameters": {
                    "id": 630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 629,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 634,
                        "src": "2249:13:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 628,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2249:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2248:15:6"
                  },
                  "scope": 1076,
                  "src": "2212:81:6",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 642,
                    "nodeType": "Block",
                    "src": "2460:31:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 640,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 602,
                          "src": "2477:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 639,
                        "id": 641,
                        "nodeType": "Return",
                        "src": "2470:14:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 635,
                    "nodeType": "StructuredDocumentation",
                    "src": "2299:102:6",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 643,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 636,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2421:2:6"
                  },
                  "returnParameters": {
                    "id": 639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 638,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 643,
                        "src": "2445:13:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 637,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2445:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2444:15:6"
                  },
                  "scope": 1076,
                  "src": "2406:85:6",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 651,
                    "nodeType": "Block",
                    "src": "3162:33:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 649,
                          "name": "_decimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 604,
                          "src": "3179:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 648,
                        "id": 650,
                        "nodeType": "Return",
                        "src": "3172:16:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 644,
                    "nodeType": "StructuredDocumentation",
                    "src": "2497:612:6",
                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                  },
                  "functionSelector": "313ce567",
                  "id": 652,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 645,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3131:2:6"
                  },
                  "returnParameters": {
                    "id": 648,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 647,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 652,
                        "src": "3155:5:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 646,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3155:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3154:7:6"
                  },
                  "scope": 1076,
                  "src": "3114:81:6",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1085
                  ],
                  "body": {
                    "id": 661,
                    "nodeType": "Block",
                    "src": "3317:36:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 659,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 598,
                          "src": "3334:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 658,
                        "id": 660,
                        "nodeType": "Return",
                        "src": "3327:19:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 653,
                    "nodeType": "StructuredDocumentation",
                    "src": "3201:49:6",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 662,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 655,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3290:8:6"
                  },
                  "parameters": {
                    "id": 654,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3275:2:6"
                  },
                  "returnParameters": {
                    "id": 658,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 657,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 662,
                        "src": "3308:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 656,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3308:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3307:9:6"
                  },
                  "scope": 1076,
                  "src": "3255:98:6",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1093
                  ],
                  "body": {
                    "id": 675,
                    "nodeType": "Block",
                    "src": "3486:42:6",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 671,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 590,
                            "src": "3503:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 673,
                          "indexExpression": {
                            "id": 672,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 665,
                            "src": "3513:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3503:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 670,
                        "id": 674,
                        "nodeType": "Return",
                        "src": "3496:25:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 663,
                    "nodeType": "StructuredDocumentation",
                    "src": "3359:47:6",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 676,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 667,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3459:8:6"
                  },
                  "parameters": {
                    "id": 666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 665,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 676,
                        "src": "3430:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 664,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3430:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3429:17:6"
                  },
                  "returnParameters": {
                    "id": 670,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 669,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 676,
                        "src": "3477:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 668,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3477:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3476:9:6"
                  },
                  "scope": 1076,
                  "src": "3411:117:6",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1103
                  ],
                  "body": {
                    "id": 696,
                    "nodeType": "Block",
                    "src": "3823:80:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 688,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10,
                                "src": "3843:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3843:12:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 690,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 679,
                              "src": "3857:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 691,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 681,
                              "src": "3868:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 687,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 897,
                            "src": "3833:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 692,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3833:42:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 693,
                        "nodeType": "ExpressionStatement",
                        "src": "3833:42:6"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3892:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 686,
                        "id": 695,
                        "nodeType": "Return",
                        "src": "3885:11:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 677,
                    "nodeType": "StructuredDocumentation",
                    "src": "3534:192:6",
                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 697,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 683,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3799:8:6"
                  },
                  "parameters": {
                    "id": 682,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 679,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 697,
                        "src": "3749:17:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 678,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3749:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 681,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 697,
                        "src": "3768:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 680,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3768:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3748:35:6"
                  },
                  "returnParameters": {
                    "id": 686,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 685,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 697,
                        "src": "3817:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 684,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3817:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3816:6:6"
                  },
                  "scope": 1076,
                  "src": "3731:172:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1113
                  ],
                  "body": {
                    "id": 714,
                    "nodeType": "Block",
                    "src": "4059:51:6",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 708,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 596,
                              "src": "4076:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 710,
                            "indexExpression": {
                              "id": 709,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 700,
                              "src": "4088:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4076:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 712,
                          "indexExpression": {
                            "id": 711,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 702,
                            "src": "4095:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4076:27:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 707,
                        "id": 713,
                        "nodeType": "Return",
                        "src": "4069:34:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 698,
                    "nodeType": "StructuredDocumentation",
                    "src": "3909:47:6",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 715,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 704,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4032:8:6"
                  },
                  "parameters": {
                    "id": 703,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 700,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 715,
                        "src": "3980:13:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 699,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3980:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 702,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 715,
                        "src": "3995:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 701,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3995:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3979:32:6"
                  },
                  "returnParameters": {
                    "id": 707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 706,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 715,
                        "src": "4050:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 705,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4050:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4049:9:6"
                  },
                  "scope": 1076,
                  "src": "3961:149:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1123
                  ],
                  "body": {
                    "id": 735,
                    "nodeType": "Block",
                    "src": "4337:77:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 727,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10,
                                "src": "4356:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4356:12:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 729,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 718,
                              "src": "4370:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 730,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 720,
                              "src": "4379:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 726,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1053,
                            "src": "4347:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4347:39:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 732,
                        "nodeType": "ExpressionStatement",
                        "src": "4347:39:6"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4403:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 725,
                        "id": 734,
                        "nodeType": "Return",
                        "src": "4396:11:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 716,
                    "nodeType": "StructuredDocumentation",
                    "src": "4116:127:6",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 736,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 722,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4313:8:6"
                  },
                  "parameters": {
                    "id": 721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 718,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 736,
                        "src": "4265:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 717,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4265:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 720,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 736,
                        "src": "4282:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4282:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4264:33:6"
                  },
                  "returnParameters": {
                    "id": 725,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 724,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 736,
                        "src": "4331:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 723,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4331:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4330:6:6"
                  },
                  "scope": 1076,
                  "src": "4248:166:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1135
                  ],
                  "body": {
                    "id": 773,
                    "nodeType": "Block",
                    "src": "4986:205:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 750,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 739,
                              "src": "5006:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 751,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 741,
                              "src": "5014:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 752,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 743,
                              "src": "5025:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 749,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 897,
                            "src": "4996:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4996:36:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 754,
                        "nodeType": "ExpressionStatement",
                        "src": "4996:36:6"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 756,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 739,
                              "src": "5051:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 757,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10,
                                "src": "5059:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5059:12:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 766,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 743,
                                  "src": "5111:6:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                  "id": 767,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5119:42:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  },
                                  "value": "ERC20: transfer amount exceeds allowance"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 759,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 596,
                                      "src": "5073:11:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 761,
                                    "indexExpression": {
                                      "id": 760,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 739,
                                      "src": "5085:6:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5073:19:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 764,
                                  "indexExpression": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 762,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10,
                                      "src": "5093:10:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                        "typeString": "function () view returns (address payable)"
                                      }
                                    },
                                    "id": 763,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5093:12:6",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5073:33:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 765,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 447,
                                "src": "5073:37:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5073:89:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 755,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1053,
                            "src": "5042:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5042:121:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 770,
                        "nodeType": "ExpressionStatement",
                        "src": "5042:121:6"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5180:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 748,
                        "id": 772,
                        "nodeType": "Return",
                        "src": "5173:11:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 737,
                    "nodeType": "StructuredDocumentation",
                    "src": "4420:449:6",
                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20};\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                  },
                  "functionSelector": "23b872dd",
                  "id": 774,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 745,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4962:8:6"
                  },
                  "parameters": {
                    "id": 744,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 739,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 774,
                        "src": "4896:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 738,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4896:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 741,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 774,
                        "src": "4912:17:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 740,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4912:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 743,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 774,
                        "src": "4931:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 742,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4931:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4895:51:6"
                  },
                  "returnParameters": {
                    "id": 748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 747,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 774,
                        "src": "4980:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 746,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4980:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4979:6:6"
                  },
                  "scope": 1076,
                  "src": "4874:317:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 801,
                    "nodeType": "Block",
                    "src": "5680:121:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 785,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10,
                                "src": "5699:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5699:12:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 787,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 777,
                              "src": "5713:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 795,
                                  "name": "addedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 779,
                                  "src": "5761:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 788,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 596,
                                      "src": "5722:11:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 791,
                                    "indexExpression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 789,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10,
                                        "src": "5734:10:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 790,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5734:12:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5722:25:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 793,
                                  "indexExpression": {
                                    "id": 792,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 777,
                                    "src": "5748:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5722:34:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 794,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 402,
                                "src": "5722:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5722:50:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 784,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1053,
                            "src": "5690:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5690:83:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 798,
                        "nodeType": "ExpressionStatement",
                        "src": "5690:83:6"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5790:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 783,
                        "id": 800,
                        "nodeType": "Return",
                        "src": "5783:11:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 775,
                    "nodeType": "StructuredDocumentation",
                    "src": "5197:384:6",
                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "39509351",
                  "id": 802,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 780,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 777,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 802,
                        "src": "5613:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 776,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5613:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 779,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 802,
                        "src": "5630:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 778,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5630:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5612:37:6"
                  },
                  "returnParameters": {
                    "id": 783,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 782,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 802,
                        "src": "5674:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 781,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5674:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5673:6:6"
                  },
                  "scope": 1076,
                  "src": "5586:215:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 830,
                    "nodeType": "Block",
                    "src": "6387:167:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 813,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10,
                                "src": "6406:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6406:12:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 815,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 805,
                              "src": "6420:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 823,
                                  "name": "subtractedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 807,
                                  "src": "6468:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 824,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6485:39:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  },
                                  "value": "ERC20: decreased allowance below zero"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 816,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 596,
                                      "src": "6429:11:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 819,
                                    "indexExpression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 817,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10,
                                        "src": "6441:10:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 818,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6441:12:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6429:25:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 821,
                                  "indexExpression": {
                                    "id": 820,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 805,
                                    "src": "6455:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6429:34:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 447,
                                "src": "6429:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 825,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6429:96:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 812,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1053,
                            "src": "6397:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6397:129:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 827,
                        "nodeType": "ExpressionStatement",
                        "src": "6397:129:6"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6543:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 811,
                        "id": 829,
                        "nodeType": "Return",
                        "src": "6536:11:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 803,
                    "nodeType": "StructuredDocumentation",
                    "src": "5807:476:6",
                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                  },
                  "functionSelector": "a457c2d7",
                  "id": 831,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 805,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 831,
                        "src": "6315:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 804,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6315:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 807,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 831,
                        "src": "6332:23:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 806,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6332:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6314:42:6"
                  },
                  "returnParameters": {
                    "id": 811,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 810,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 831,
                        "src": "6381:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 809,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6381:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6380:6:6"
                  },
                  "scope": 1076,
                  "src": "6288:266:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 896,
                    "nodeType": "Block",
                    "src": "7115:443:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 842,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 834,
                                "src": "7133:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 845,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7151:1:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 844,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7143:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 843,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7143:7:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 846,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7143:10:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7133:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7155:39:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              },
                              "value": "ERC20: transfer from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              }
                            ],
                            "id": 841,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7125:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7125:70:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 850,
                        "nodeType": "ExpressionStatement",
                        "src": "7125:70:6"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 857,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 852,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 836,
                                "src": "7213:9:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 855,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7234:1:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7226:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 853,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7226:7:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 856,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7226:10:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7213:23:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 858,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7238:37:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              },
                              "value": "ERC20: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              }
                            ],
                            "id": 851,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7205:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7205:71:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 860,
                        "nodeType": "ExpressionStatement",
                        "src": "7205:71:6"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 862,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 834,
                              "src": "7308:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 863,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 836,
                              "src": "7316:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 864,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 838,
                              "src": "7327:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 861,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1075,
                            "src": "7287:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7287:47:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 866,
                        "nodeType": "ExpressionStatement",
                        "src": "7287:47:6"
                      },
                      {
                        "expression": {
                          "id": 877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 867,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 590,
                              "src": "7345:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 869,
                            "indexExpression": {
                              "id": 868,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 834,
                              "src": "7355:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7345:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 874,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 838,
                                "src": "7387:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                "id": 875,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7395:40:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                },
                                "value": "ERC20: transfer amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 870,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 590,
                                  "src": "7365:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 872,
                                "indexExpression": {
                                  "id": 871,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 834,
                                  "src": "7375:6:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7365:17:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 873,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 447,
                              "src": "7365:21:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 876,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7365:71:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7345:91:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 878,
                        "nodeType": "ExpressionStatement",
                        "src": "7345:91:6"
                      },
                      {
                        "expression": {
                          "id": 888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 879,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 590,
                              "src": "7446:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 881,
                            "indexExpression": {
                              "id": 880,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 836,
                              "src": "7456:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7446:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 886,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 838,
                                "src": "7494:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 882,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 590,
                                  "src": "7469:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 884,
                                "indexExpression": {
                                  "id": 883,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 836,
                                  "src": "7479:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7469:20:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "7469:24:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7469:32:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7446:55:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 889,
                        "nodeType": "ExpressionStatement",
                        "src": "7446:55:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 891,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 834,
                              "src": "7525:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 892,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 836,
                              "src": "7533:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 893,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 838,
                              "src": "7544:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 890,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1144,
                            "src": "7516:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7516:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 895,
                        "nodeType": "EmitStatement",
                        "src": "7511:40:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 832,
                    "nodeType": "StructuredDocumentation",
                    "src": "6560:463:6",
                    "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                  },
                  "id": 897,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 839,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 834,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 897,
                        "src": "7047:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7047:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 836,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 897,
                        "src": "7063:17:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 835,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7063:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 838,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 897,
                        "src": "7082:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 837,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7082:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7046:51:6"
                  },
                  "returnParameters": {
                    "id": 840,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7115:0:6"
                  },
                  "scope": 1076,
                  "src": "7028:530:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 951,
                    "nodeType": "Block",
                    "src": "7893:305:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 911,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 906,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 900,
                                "src": "7911:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 909,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7930:1:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 908,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7922:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 907,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7922:7:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 910,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7922:10:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7911:21:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 912,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7934:33:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              },
                              "value": "ERC20: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              }
                            ],
                            "id": 905,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7903:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7903:65:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 914,
                        "nodeType": "ExpressionStatement",
                        "src": "7903:65:6"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 918,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8008:1:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 917,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8000:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 916,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8000:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8000:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 920,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 900,
                              "src": "8012:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 921,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 902,
                              "src": "8021:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 915,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1075,
                            "src": "7979:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7979:49:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 923,
                        "nodeType": "ExpressionStatement",
                        "src": "7979:49:6"
                      },
                      {
                        "expression": {
                          "id": 929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 924,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 598,
                            "src": "8039:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 927,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 902,
                                "src": "8071:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 925,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 598,
                                "src": "8054:12:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 926,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "8054:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8054:24:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8039:39:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 930,
                        "nodeType": "ExpressionStatement",
                        "src": "8039:39:6"
                      },
                      {
                        "expression": {
                          "id": 940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 931,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 590,
                              "src": "8088:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 933,
                            "indexExpression": {
                              "id": 932,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 900,
                              "src": "8098:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8088:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 938,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 902,
                                "src": "8132:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 934,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 590,
                                  "src": "8109:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 936,
                                "indexExpression": {
                                  "id": 935,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 900,
                                  "src": "8119:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8109:18:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "8109:22:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 939,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8109:30:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8088:51:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 941,
                        "nodeType": "ExpressionStatement",
                        "src": "8088:51:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 945,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8171:1:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 944,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8163:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 943,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8163:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8163:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 947,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 900,
                              "src": "8175:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 948,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 902,
                              "src": "8184:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 942,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1144,
                            "src": "8154:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8154:37:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 950,
                        "nodeType": "EmitStatement",
                        "src": "8149:42:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 898,
                    "nodeType": "StructuredDocumentation",
                    "src": "7564:259:6",
                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements\n - `to` cannot be the zero address."
                  },
                  "id": 952,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 903,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 900,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 952,
                        "src": "7843:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 899,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7843:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 902,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 952,
                        "src": "7860:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 901,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7860:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7842:33:6"
                  },
                  "returnParameters": {
                    "id": 904,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7893:0:6"
                  },
                  "scope": 1076,
                  "src": "7828:370:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1007,
                    "nodeType": "Block",
                    "src": "8582:345:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 961,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 955,
                                "src": "8600:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 964,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8619:1:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 963,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8611:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 962,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8611:7:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8611:10:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "8600:21:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8623:35:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              },
                              "value": "ERC20: burn from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              }
                            ],
                            "id": 960,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8592:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8592:67:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 969,
                        "nodeType": "ExpressionStatement",
                        "src": "8592:67:6"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 971,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "8691:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 974,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8708:1:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 973,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8700:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 972,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8700:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 975,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8700:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 976,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 957,
                              "src": "8712:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 970,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1075,
                            "src": "8670:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8670:49:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 978,
                        "nodeType": "ExpressionStatement",
                        "src": "8670:49:6"
                      },
                      {
                        "expression": {
                          "id": 989,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 979,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 590,
                              "src": "8730:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 981,
                            "indexExpression": {
                              "id": 980,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "8740:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8730:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 986,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 957,
                                "src": "8774:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                "id": 987,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8782:36:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                },
                                "value": "ERC20: burn amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 982,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 590,
                                  "src": "8751:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 984,
                                "indexExpression": {
                                  "id": 983,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 955,
                                  "src": "8761:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8751:18:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 447,
                              "src": "8751:22:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 988,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8751:68:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8730:89:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 990,
                        "nodeType": "ExpressionStatement",
                        "src": "8730:89:6"
                      },
                      {
                        "expression": {
                          "id": 996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 991,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 598,
                            "src": "8829:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 994,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 957,
                                "src": "8861:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 992,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 598,
                                "src": "8844:12:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 419,
                              "src": "8844:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 995,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8844:24:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8829:39:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 997,
                        "nodeType": "ExpressionStatement",
                        "src": "8829:39:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 999,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "8892:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1002,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8909:1:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1001,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8901:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1000,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8901:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1003,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8901:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 1004,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 957,
                              "src": "8913:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 998,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1144,
                            "src": "8883:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8883:37:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1006,
                        "nodeType": "EmitStatement",
                        "src": "8878:42:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 953,
                    "nodeType": "StructuredDocumentation",
                    "src": "8204:308:6",
                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                  },
                  "id": 1008,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 958,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 955,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 1008,
                        "src": "8532:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 954,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8532:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 957,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1008,
                        "src": "8549:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 956,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8549:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8531:33:6"
                  },
                  "returnParameters": {
                    "id": 959,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8582:0:6"
                  },
                  "scope": 1076,
                  "src": "8517:410:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1052,
                    "nodeType": "Block",
                    "src": "9433:257:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1024,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1019,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1011,
                                "src": "9451:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 1022,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9468:1:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1021,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9460:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1020,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9460:7:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9460:10:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "9451:19:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 1025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9472:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              },
                              "value": "ERC20: approve from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              }
                            ],
                            "id": 1018,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9443:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9443:68:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1027,
                        "nodeType": "ExpressionStatement",
                        "src": "9443:68:6"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1029,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1013,
                                "src": "9529:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 1032,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9548:1:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1031,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9540:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1030,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9540:7:6",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9540:10:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "9529:21:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 1035,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9552:36:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              },
                              "value": "ERC20: approve to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              }
                            ],
                            "id": 1028,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9521:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9521:68:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1037,
                        "nodeType": "ExpressionStatement",
                        "src": "9521:68:6"
                      },
                      {
                        "expression": {
                          "id": 1044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1038,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 596,
                                "src": "9600:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1041,
                              "indexExpression": {
                                "id": 1039,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1011,
                                "src": "9612:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9600:18:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1042,
                            "indexExpression": {
                              "id": 1040,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1013,
                              "src": "9619:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9600:27:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1043,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1015,
                            "src": "9630:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9600:36:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1045,
                        "nodeType": "ExpressionStatement",
                        "src": "9600:36:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1047,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1011,
                              "src": "9660:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1048,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1013,
                              "src": "9667:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1049,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1015,
                              "src": "9676:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1046,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1153,
                            "src": "9651:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9651:32:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1051,
                        "nodeType": "EmitStatement",
                        "src": "9646:37:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1009,
                    "nodeType": "StructuredDocumentation",
                    "src": "8933:412:6",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                  },
                  "id": 1053,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1016,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1011,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 1053,
                        "src": "9368:13:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1010,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9368:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1013,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 1053,
                        "src": "9383:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1012,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9383:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1015,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1053,
                        "src": "9400:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1014,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9400:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9367:48:6"
                  },
                  "returnParameters": {
                    "id": 1017,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9433:0:6"
                  },
                  "scope": 1076,
                  "src": "9350:340:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1063,
                    "nodeType": "Block",
                    "src": "10063:38:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 1061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1059,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 604,
                            "src": "10073:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1060,
                            "name": "decimals_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1056,
                            "src": "10085:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "10073:21:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1062,
                        "nodeType": "ExpressionStatement",
                        "src": "10073:21:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1054,
                    "nodeType": "StructuredDocumentation",
                    "src": "9696:312:6",
                    "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                  },
                  "id": 1064,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setupDecimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1057,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1056,
                        "mutability": "mutable",
                        "name": "decimals_",
                        "nodeType": "VariableDeclaration",
                        "scope": 1064,
                        "src": "10037:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1055,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "10037:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10036:17:6"
                  },
                  "returnParameters": {
                    "id": 1058,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10063:0:6"
                  },
                  "scope": 1076,
                  "src": "10013:88:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1074,
                    "nodeType": "Block",
                    "src": "10777:3:6",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1065,
                    "nodeType": "StructuredDocumentation",
                    "src": "10107:576:6",
                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 1075,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1072,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1067,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "10718:12:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1066,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10718:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1069,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "10732:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1068,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10732:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1071,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "10744:14:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1070,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10744:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10717:42:6"
                  },
                  "returnParameters": {
                    "id": 1073,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10777:0:6"
                  },
                  "scope": 1076,
                  "src": "10688:92:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1077,
              "src": "1345:9437:6"
            }
          ],
          "src": "33:10750:6"
        },
        "id": 6
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "exportedSymbols": {
            "IERC20": [
              1154
            ]
          },
          "id": 1155,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1078,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:7"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1079,
                "nodeType": "StructuredDocumentation",
                "src": "58:70:7",
                "text": " @dev Interface of the ERC20 standard as defined in the EIP."
              },
              "fullyImplemented": false,
              "id": 1154,
              "linearizedBaseContracts": [
                1154
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1080,
                    "nodeType": "StructuredDocumentation",
                    "src": "152:66:7",
                    "text": " @dev Returns the amount of tokens in existence."
                  },
                  "functionSelector": "18160ddd",
                  "id": 1085,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1081,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "243:2:7"
                  },
                  "returnParameters": {
                    "id": 1084,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1083,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1085,
                        "src": "269:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1082,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "269:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "268:9:7"
                  },
                  "scope": 1154,
                  "src": "223:55:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1086,
                    "nodeType": "StructuredDocumentation",
                    "src": "284:72:7",
                    "text": " @dev Returns the amount of tokens owned by `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 1093,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1089,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1088,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 1093,
                        "src": "380:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1087,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "380:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "379:17:7"
                  },
                  "returnParameters": {
                    "id": 1092,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1091,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1093,
                        "src": "420:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1090,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "420:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "419:9:7"
                  },
                  "scope": 1154,
                  "src": "361:68:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1094,
                    "nodeType": "StructuredDocumentation",
                    "src": "435:209:7",
                    "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 1103,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1099,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1096,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 1103,
                        "src": "667:17:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1095,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "667:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1098,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1103,
                        "src": "686:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1097,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "686:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "666:35:7"
                  },
                  "returnParameters": {
                    "id": 1102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1101,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1103,
                        "src": "720:4:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1100,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "720:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "719:6:7"
                  },
                  "scope": 1154,
                  "src": "649:77:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1104,
                    "nodeType": "StructuredDocumentation",
                    "src": "732:264:7",
                    "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 1113,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1109,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1106,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 1113,
                        "src": "1020:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1105,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1020:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1108,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 1113,
                        "src": "1035:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1107,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1035:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1019:32:7"
                  },
                  "returnParameters": {
                    "id": 1112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1111,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1113,
                        "src": "1075:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1110,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1075:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1074:9:7"
                  },
                  "scope": 1154,
                  "src": "1001:83:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1114,
                    "nodeType": "StructuredDocumentation",
                    "src": "1090:642:7",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1123,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1119,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1116,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 1123,
                        "src": "1754:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1115,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1754:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1118,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1123,
                        "src": "1771:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1117,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1771:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1753:33:7"
                  },
                  "returnParameters": {
                    "id": 1122,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1121,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1123,
                        "src": "1805:4:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1120,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1805:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1804:6:7"
                  },
                  "scope": 1154,
                  "src": "1737:74:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1124,
                    "nodeType": "StructuredDocumentation",
                    "src": "1817:296:7",
                    "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 1135,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1131,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1126,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 1135,
                        "src": "2140:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1125,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2140:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1128,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 1135,
                        "src": "2156:17:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1127,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2156:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1130,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1135,
                        "src": "2175:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1129,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2175:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2139:51:7"
                  },
                  "returnParameters": {
                    "id": 1134,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1133,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1135,
                        "src": "2209:4:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1132,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2209:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2208:6:7"
                  },
                  "scope": 1154,
                  "src": "2118:97:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1136,
                    "nodeType": "StructuredDocumentation",
                    "src": "2221:158:7",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 1144,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1138,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 1144,
                        "src": "2399:20:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1137,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2399:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1140,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 1144,
                        "src": "2421:18:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1139,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2421:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1142,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 1144,
                        "src": "2441:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1141,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2441:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2398:57:7"
                  },
                  "src": "2384:72:7"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1145,
                    "nodeType": "StructuredDocumentation",
                    "src": "2462:148:7",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 1153,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1147,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 1153,
                        "src": "2630:21:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1146,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2630:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1149,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 1153,
                        "src": "2653:23:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1148,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2653:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1151,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 1153,
                        "src": "2678:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1150,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2678:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2629:63:7"
                  },
                  "src": "2615:78:7"
                }
              ],
              "scope": 1155,
              "src": "129:2566:7"
            }
          ],
          "src": "33:2663:7"
        },
        "id": 7
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
          "exportedSymbols": {
            "Address": [
              1358
            ]
          },
          "id": 1359,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1156,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:8"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1157,
                "nodeType": "StructuredDocumentation",
                "src": "58:67:8",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 1358,
              "linearizedBaseContracts": [
                1358
              ],
              "name": "Address",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1182,
                    "nodeType": "Block",
                    "src": "784:544:8",
                    "statements": [
                      {
                        "assignments": [
                          1166
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1166,
                            "mutability": "mutable",
                            "name": "codehash",
                            "nodeType": "VariableDeclaration",
                            "scope": 1182,
                            "src": "1036:16:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1165,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1036:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1167,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1036:16:8"
                      },
                      {
                        "assignments": [
                          1169
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1169,
                            "mutability": "mutable",
                            "name": "accountHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 1182,
                            "src": "1062:19:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1168,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1062:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1171,
                        "initialValue": {
                          "hexValue": "307863356432343630313836663732333363393237653764623264636337303363306535303062363533636138323237336237626661643830343564383561343730",
                          "id": 1170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1084:66:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_89477152217924674838424037953991966239322087453347756267410168184682657981552_by_1",
                            "typeString": "int_const 8947...(69 digits omitted)...1552"
                          },
                          "value": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1062:88:8"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1225:36:8",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1227:32:8",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "account",
                                    "nodeType": "YulIdentifier",
                                    "src": "1251:7:8"
                                  }
                                ],
                                "functionName": {
                                  "name": "extcodehash",
                                  "nodeType": "YulIdentifier",
                                  "src": "1239:11:8"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1239:20:8"
                              },
                              "variableNames": [
                                {
                                  "name": "codehash",
                                  "nodeType": "YulIdentifier",
                                  "src": "1227:8:8"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1160,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1251:7:8",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1166,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1227:8:8",
                            "valueSize": 1
                          }
                        ],
                        "id": 1172,
                        "nodeType": "InlineAssembly",
                        "src": "1216:45:8"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 1175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1173,
                                  "name": "codehash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1166,
                                  "src": "1278:8:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 1174,
                                  "name": "accountHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1169,
                                  "src": "1290:11:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "1278:23:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 1178,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1176,
                                  "name": "codehash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1166,
                                  "src": "1305:8:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "307830",
                                  "id": 1177,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1317:3:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0x0"
                                },
                                "src": "1305:15:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1278:42:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1180,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1277:44:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1164,
                        "id": 1181,
                        "nodeType": "Return",
                        "src": "1270:51:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1158,
                    "nodeType": "StructuredDocumentation",
                    "src": "148:565:8",
                    "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="
                  },
                  "id": 1183,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1161,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1160,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 1183,
                        "src": "738:15:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1159,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "738:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "737:17:8"
                  },
                  "returnParameters": {
                    "id": 1164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1163,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1183,
                        "src": "778:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1162,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "778:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "777:6:8"
                  },
                  "scope": 1358,
                  "src": "718:610:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1216,
                    "nodeType": "Block",
                    "src": "2316:320:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1198,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1194,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "2342:4:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$1358",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$1358",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 1193,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2334:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1192,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2334:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2334:13:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "2334:21:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1197,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1188,
                                "src": "2359:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2334:31:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 1199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2367:31:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              },
                              "value": "Address: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              }
                            ],
                            "id": 1191,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2326:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2326:73:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1201,
                        "nodeType": "ExpressionStatement",
                        "src": "2326:73:8"
                      },
                      {
                        "assignments": [
                          1203,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1203,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 1216,
                            "src": "2488:12:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1202,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2488:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 1210,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 1208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2538:2:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "id": 1204,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1186,
                                "src": "2506:9:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 1205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "2506:14:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 1207,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 1206,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1188,
                                "src": "2529:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "2506:31:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2506:35:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2487:54:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1212,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1203,
                              "src": "2559:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 1213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2568:60:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              },
                              "value": "Address: unable to send value, recipient may have reverted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              }
                            ],
                            "id": 1211,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2551:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2551:78:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1215,
                        "nodeType": "ExpressionStatement",
                        "src": "2551:78:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1184,
                    "nodeType": "StructuredDocumentation",
                    "src": "1334:906:8",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 1217,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1186,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 1217,
                        "src": "2264:25:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 1185,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2264:15:8",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1188,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1217,
                        "src": "2291:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1187,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2291:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2263:43:8"
                  },
                  "returnParameters": {
                    "id": 1190,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2316:0:8"
                  },
                  "scope": 1358,
                  "src": "2245:391:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1233,
                    "nodeType": "Block",
                    "src": "3466:82:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1228,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1220,
                              "src": "3494:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1229,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1222,
                              "src": "3502:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 1230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3508:32:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              },
                              "value": "Address: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              }
                            ],
                            "id": 1227,
                            "name": "functionCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1234,
                              1254
                            ],
                            "referencedDeclaration": 1254,
                            "src": "3481:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3481:60:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1226,
                        "id": 1232,
                        "nodeType": "Return",
                        "src": "3474:67:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1218,
                    "nodeType": "StructuredDocumentation",
                    "src": "2642:730:8",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain`call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                  },
                  "id": 1234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1220,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "scope": 1234,
                        "src": "3399:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1219,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3399:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1222,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 1234,
                        "src": "3415:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1221,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3415:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3398:35:8"
                  },
                  "returnParameters": {
                    "id": 1226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1225,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1234,
                        "src": "3452:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1224,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3452:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3451:14:8"
                  },
                  "scope": 1358,
                  "src": "3377:171:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1253,
                    "nodeType": "Block",
                    "src": "3887:77:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1247,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1237,
                              "src": "3927:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1248,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1239,
                              "src": "3935:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 1249,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3941:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 1250,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1241,
                              "src": "3944:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1246,
                            "name": "_functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "3904:22:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3904:53:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1245,
                        "id": 1252,
                        "nodeType": "Return",
                        "src": "3897:60:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1235,
                    "nodeType": "StructuredDocumentation",
                    "src": "3554:211:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 1254,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1242,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1237,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "scope": 1254,
                        "src": "3792:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3792:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1239,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 1254,
                        "src": "3808:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1238,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3808:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1241,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 1254,
                        "src": "3827:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1240,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3827:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3791:63:8"
                  },
                  "returnParameters": {
                    "id": 1245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1244,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1254,
                        "src": "3873:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1243,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3873:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3872:14:8"
                  },
                  "scope": 1358,
                  "src": "3770:194:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1273,
                    "nodeType": "Block",
                    "src": "4439:111:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1267,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "4478:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1268,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1259,
                              "src": "4486:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1269,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1261,
                              "src": "4492:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 1270,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4499:43:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              },
                              "value": "Address: low-level call with value failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              }
                            ],
                            "id": 1266,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1274,
                              1307
                            ],
                            "referencedDeclaration": 1307,
                            "src": "4456:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4456:87:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1265,
                        "id": 1272,
                        "nodeType": "Return",
                        "src": "4449:94:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1255,
                    "nodeType": "StructuredDocumentation",
                    "src": "3970:351:8",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                  },
                  "id": 1274,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1262,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1257,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "scope": 1274,
                        "src": "4357:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1256,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4357:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1259,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 1274,
                        "src": "4373:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1258,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4373:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1261,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 1274,
                        "src": "4392:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1260,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4392:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4356:50:8"
                  },
                  "returnParameters": {
                    "id": 1265,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1264,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1274,
                        "src": "4425:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1263,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4425:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4424:14:8"
                  },
                  "scope": 1358,
                  "src": "4326:224:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1306,
                    "nodeType": "Block",
                    "src": "4939:172:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1295,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1291,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "4965:4:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$1358",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$1358",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 1290,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4957:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1289,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4957:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1292,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4957:13:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "4957:21:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1294,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "4982:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4957:30:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 1296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4989:40:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              },
                              "value": "Address: insufficient balance for call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              }
                            ],
                            "id": 1288,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4949:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4949:81:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1298,
                        "nodeType": "ExpressionStatement",
                        "src": "4949:81:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1300,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1277,
                              "src": "5070:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1301,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1279,
                              "src": "5078:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1302,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1281,
                              "src": "5084:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1303,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1283,
                              "src": "5091:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1299,
                            "name": "_functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "5047:22:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5047:57:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1287,
                        "id": 1305,
                        "nodeType": "Return",
                        "src": "5040:64:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1275,
                    "nodeType": "StructuredDocumentation",
                    "src": "4556:237:8",
                    "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 1307,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1284,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1277,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "scope": 1307,
                        "src": "4829:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4829:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1279,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 1307,
                        "src": "4845:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1278,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4845:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1281,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 1307,
                        "src": "4864:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4864:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1283,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 1307,
                        "src": "4879:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1282,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4879:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4828:78:8"
                  },
                  "returnParameters": {
                    "id": 1287,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1286,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1307,
                        "src": "4925:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1285,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4925:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4924:14:8"
                  },
                  "scope": 1358,
                  "src": "4798:313:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1356,
                    "nodeType": "Block",
                    "src": "5261:814:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1322,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1309,
                                  "src": "5290:6:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1321,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1183,
                                "src": "5279:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 1323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5279:18:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 1324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5299:31:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              },
                              "value": "Address: call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              }
                            ],
                            "id": 1320,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5271:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5271:60:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1326,
                        "nodeType": "ExpressionStatement",
                        "src": "5271:60:8"
                      },
                      {
                        "assignments": [
                          1328,
                          1330
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1328,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 1356,
                            "src": "5402:12:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1327,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5402:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1330,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "scope": 1356,
                            "src": "5416:23:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1329,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5416:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1337,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1335,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "5474:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 1331,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1309,
                                "src": "5443:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1332,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "5443:11:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 1334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 1333,
                                "name": "weiValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1313,
                                "src": "5463:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5443:30:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 1336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5443:36:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5401:78:8"
                      },
                      {
                        "condition": {
                          "id": 1338,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1328,
                          "src": "5493:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1354,
                          "nodeType": "Block",
                          "src": "5550:519:8",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 1342,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1330,
                                    "src": "5634:10:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "5634:17:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 1344,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5654:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "5634:21:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1352,
                                "nodeType": "Block",
                                "src": "6006:53:8",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 1349,
                                          "name": "errorMessage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1315,
                                          "src": "6031:12:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 1348,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "6024:6:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 1350,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6024:20:8",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1351,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6024:20:8"
                                  }
                                ]
                              },
                              "id": 1353,
                              "nodeType": "IfStatement",
                              "src": "5630:429:8",
                              "trueBody": {
                                "id": 1347,
                                "nodeType": "Block",
                                "src": "5657:343:8",
                                "statements": [
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "5841:145:8",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "5863:40:8",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "returndata",
                                                "nodeType": "YulIdentifier",
                                                "src": "5892:10:8"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "5886:5:8"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5886:17:8"
                                          },
                                          "variables": [
                                            {
                                              "name": "returndata_size",
                                              "nodeType": "YulTypedName",
                                              "src": "5867:15:8",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5935:2:8",
                                                    "type": "",
                                                    "value": "32"
                                                  },
                                                  {
                                                    "name": "returndata",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5939:10:8"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5931:3:8"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5931:19:8"
                                              },
                                              {
                                                "name": "returndata_size",
                                                "nodeType": "YulIdentifier",
                                                "src": "5952:15:8"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "5924:6:8"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5924:44:8"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "5924:44:8"
                                        }
                                      ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                      {
                                        "declaration": 1330,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "5892:10:8",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 1330,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "5939:10:8",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 1346,
                                    "nodeType": "InlineAssembly",
                                    "src": "5832:154:8"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 1355,
                        "nodeType": "IfStatement",
                        "src": "5489:580:8",
                        "trueBody": {
                          "id": 1341,
                          "nodeType": "Block",
                          "src": "5502:42:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 1339,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1330,
                                "src": "5523:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 1319,
                              "id": 1340,
                              "nodeType": "Return",
                              "src": "5516:17:8"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 1357,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1316,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1309,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "scope": 1357,
                        "src": "5149:14:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1308,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5149:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1311,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 1357,
                        "src": "5165:17:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1310,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5165:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1313,
                        "mutability": "mutable",
                        "name": "weiValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 1357,
                        "src": "5184:16:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1312,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5184:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1315,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 1357,
                        "src": "5202:26:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1314,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5202:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5148:81:8"
                  },
                  "returnParameters": {
                    "id": 1319,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1318,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1357,
                        "src": "5247:12:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1317,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5247:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5246:14:8"
                  },
                  "scope": 1358,
                  "src": "5117:958:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 1359,
              "src": "126:5951:8"
            }
          ],
          "src": "33:6045:8"
        },
        "id": 8
      },
      "@openzeppelin/contracts/utils/Create2.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Create2.sol",
          "exportedSymbols": {
            "Create2": [
              1466
            ]
          },
          "id": 1467,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1360,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:9"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1361,
                "nodeType": "StructuredDocumentation",
                "src": "58:367:9",
                "text": " @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n `CREATE2` can be used to compute in advance the address where a smart\n contract will be deployed, which allows for interesting new mechanisms known\n as 'counterfactual interactions'.\n See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n information."
              },
              "fullyImplemented": true,
              "id": 1466,
              "linearizedBaseContracts": [
                1466
              ],
              "name": "Create2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1408,
                    "nodeType": "Block",
                    "src": "1109:439:9",
                    "statements": [
                      {
                        "assignments": [
                          1374
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1374,
                            "mutability": "mutable",
                            "name": "addr",
                            "nodeType": "VariableDeclaration",
                            "scope": 1408,
                            "src": "1119:12:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1373,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1119:7:9",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1375,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1119:12:9"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1379,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "1157:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Create2_$1466",
                                        "typeString": "library Create2"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Create2_$1466",
                                        "typeString": "library Create2"
                                      }
                                    ],
                                    "id": 1378,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1149:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1377,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1149:7:9",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1380,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1149:13:9",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1381,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "1149:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1382,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1364,
                                "src": "1174:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1149:31:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "437265617465323a20696e73756666696369656e742062616c616e6365",
                              "id": 1384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1182:31:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f94f9c62541b73155a9def26a7988ac5579c2c6b698df8f608ced5572b7d72ca",
                                "typeString": "literal_string \"Create2: insufficient balance\""
                              },
                              "value": "Create2: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f94f9c62541b73155a9def26a7988ac5579c2c6b698df8f608ced5572b7d72ca",
                                "typeString": "literal_string \"Create2: insufficient balance\""
                              }
                            ],
                            "id": 1376,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1141:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1141:73:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1386,
                        "nodeType": "ExpressionStatement",
                        "src": "1141:73:9"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1388,
                                  "name": "bytecode",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1368,
                                  "src": "1232:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 1389,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "1232:15:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1390,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1251:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1232:20:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "437265617465323a2062797465636f6465206c656e677468206973207a65726f",
                              "id": 1392,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1254:34:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_124767115c09b0dd37c31c42ddb030d84459c933a30879cc32c4c922ae5928f0",
                                "typeString": "literal_string \"Create2: bytecode length is zero\""
                              },
                              "value": "Create2: bytecode length is zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_124767115c09b0dd37c31c42ddb030d84459c933a30879cc32c4c922ae5928f0",
                                "typeString": "literal_string \"Create2: bytecode length is zero\""
                              }
                            ],
                            "id": 1387,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1224:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1224:65:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1394,
                        "nodeType": "ExpressionStatement",
                        "src": "1224:65:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1364:91:9",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1378:67:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "amount",
                                    "nodeType": "YulIdentifier",
                                    "src": "1394:6:9"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "bytecode",
                                        "nodeType": "YulIdentifier",
                                        "src": "1406:8:9"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1416:4:9",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1402:3:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1402:19:9"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "bytecode",
                                        "nodeType": "YulIdentifier",
                                        "src": "1429:8:9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1423:5:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1423:15:9"
                                  },
                                  {
                                    "name": "salt",
                                    "nodeType": "YulIdentifier",
                                    "src": "1440:4:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "create2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1386:7:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1386:59:9"
                              },
                              "variableNames": [
                                {
                                  "name": "addr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1378:4:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1374,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1378:4:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1364,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1394:6:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1368,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1406:8:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1368,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1429:8:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1366,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1440:4:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 1395,
                        "nodeType": "InlineAssembly",
                        "src": "1355:100:9"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1397,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1374,
                                "src": "1472:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 1400,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1488:1:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1399,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1480:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1398,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1480:7:9",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1401,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1480:10:9",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "1472:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "437265617465323a204661696c6564206f6e206465706c6f79",
                              "id": 1403,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1492:27:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_87142438d464a3cd804331cca8480b31569380ef25d1f39b80404975699f0676",
                                "typeString": "literal_string \"Create2: Failed on deploy\""
                              },
                              "value": "Create2: Failed on deploy"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_87142438d464a3cd804331cca8480b31569380ef25d1f39b80404975699f0676",
                                "typeString": "literal_string \"Create2: Failed on deploy\""
                              }
                            ],
                            "id": 1396,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1464:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1464:56:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1405,
                        "nodeType": "ExpressionStatement",
                        "src": "1464:56:9"
                      },
                      {
                        "expression": {
                          "id": 1406,
                          "name": "addr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1374,
                          "src": "1537:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1372,
                        "id": 1407,
                        "nodeType": "Return",
                        "src": "1530:11:9"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1362,
                    "nodeType": "StructuredDocumentation",
                    "src": "448:560:9",
                    "text": " @dev Deploys a contract using `CREATE2`. The address where the contract\n will be deployed can be known in advance via {computeAddress}.\n The bytecode for a contract can be obtained from Solidity with\n `type(contractName).creationCode`.\n Requirements:\n - `bytecode` must not be empty.\n - `salt` must have not been used for `bytecode` already.\n - the factory must have a balance of at least `amount`.\n - if `amount` is non-zero, `bytecode` must have a `payable` constructor."
                  },
                  "id": 1409,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deploy",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1364,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 1409,
                        "src": "1029:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1363,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1029:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1366,
                        "mutability": "mutable",
                        "name": "salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 1409,
                        "src": "1045:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1365,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1045:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1368,
                        "mutability": "mutable",
                        "name": "bytecode",
                        "nodeType": "VariableDeclaration",
                        "scope": 1409,
                        "src": "1059:21:9",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1367,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1059:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1028:53:9"
                  },
                  "returnParameters": {
                    "id": 1372,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1371,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1409,
                        "src": "1100:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1370,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1100:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1099:9:9"
                  },
                  "scope": 1466,
                  "src": "1013:535:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1428,
                    "nodeType": "Block",
                    "src": "1844:73:9",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1420,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1412,
                              "src": "1876:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1421,
                              "name": "bytecodeHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1414,
                              "src": "1882:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 1424,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1904:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Create2_$1466",
                                    "typeString": "library Create2"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Create2_$1466",
                                    "typeString": "library Create2"
                                  }
                                ],
                                "id": 1423,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1896:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1422,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1896:7:9",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1896:13:9",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1419,
                            "name": "computeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1429,
                              1465
                            ],
                            "referencedDeclaration": 1465,
                            "src": "1861:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes32,address) pure returns (address)"
                            }
                          },
                          "id": 1426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1861:49:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1418,
                        "id": 1427,
                        "nodeType": "Return",
                        "src": "1854:56:9"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1410,
                    "nodeType": "StructuredDocumentation",
                    "src": "1554:193:9",
                    "text": " @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n `bytecodeHash` or `salt` will result in a new destination address."
                  },
                  "id": 1429,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "computeAddress",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1415,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1412,
                        "mutability": "mutable",
                        "name": "salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 1429,
                        "src": "1776:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1411,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1776:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1414,
                        "mutability": "mutable",
                        "name": "bytecodeHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 1429,
                        "src": "1790:20:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1413,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1790:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1775:36:9"
                  },
                  "returnParameters": {
                    "id": 1418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1417,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1429,
                        "src": "1835:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1416,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1835:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1834:9:9"
                  },
                  "scope": 1466,
                  "src": "1752:165:9",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1464,
                    "nodeType": "Block",
                    "src": "2270:166:9",
                    "statements": [
                      {
                        "assignments": [
                          1442
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1442,
                            "mutability": "mutable",
                            "name": "_data",
                            "nodeType": "VariableDeclaration",
                            "scope": 1464,
                            "src": "2280:13:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1441,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2280:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1455,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "hexValue": "30786666",
                                      "id": 1448,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2343:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_255_by_1",
                                        "typeString": "int_const 255"
                                      },
                                      "value": "0xff"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_255_by_1",
                                        "typeString": "int_const 255"
                                      }
                                    ],
                                    "id": 1447,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2336:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes1_$",
                                      "typeString": "type(bytes1)"
                                    },
                                    "typeName": {
                                      "id": 1446,
                                      "name": "bytes1",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2336:6:9",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2336:12:9",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                {
                                  "id": 1450,
                                  "name": "deployer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1436,
                                  "src": "2350:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1451,
                                  "name": "salt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1432,
                                  "src": "2360:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 1452,
                                  "name": "bytecodeHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1434,
                                  "src": "2366:12:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 1444,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "2319:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "2319:16:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2319:60:9",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1443,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "2296:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2296:93:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2280:109:9"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1460,
                                  "name": "_data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1442,
                                  "src": "2422:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 1459,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2414:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 1458,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2414:7:9",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1461,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2414:14:9",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1457,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2406:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1456,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2406:7:9",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2406:23:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 1440,
                        "id": 1463,
                        "nodeType": "Return",
                        "src": "2399:30:9"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1430,
                    "nodeType": "StructuredDocumentation",
                    "src": "1923:232:9",
                    "text": " @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}."
                  },
                  "id": 1465,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "computeAddress",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1437,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1432,
                        "mutability": "mutable",
                        "name": "salt",
                        "nodeType": "VariableDeclaration",
                        "scope": 1465,
                        "src": "2184:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1431,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2184:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1434,
                        "mutability": "mutable",
                        "name": "bytecodeHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 1465,
                        "src": "2198:20:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1433,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2198:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1436,
                        "mutability": "mutable",
                        "name": "deployer",
                        "nodeType": "VariableDeclaration",
                        "scope": 1465,
                        "src": "2220:16:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1435,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2220:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2183:54:9"
                  },
                  "returnParameters": {
                    "id": 1440,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1439,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1465,
                        "src": "2261:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1438,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2261:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2260:9:9"
                  },
                  "scope": 1466,
                  "src": "2160:276:9",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1467,
              "src": "426:2012:9"
            }
          ],
          "src": "33:2406:9"
        },
        "id": 9
      },
      "src.sol/CMCAdjudicator.sol": {
        "ast": {
          "absolutePath": "src.sol/CMCAdjudicator.sol",
          "exportedSymbols": {
            "CMCAdjudicator": [
              2322
            ]
          },
          "id": 2323,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1468,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:10"
            },
            {
              "id": 1469,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:10"
            },
            {
              "absolutePath": "src.sol/interfaces/Commitment.sol",
              "file": "./interfaces/Commitment.sol",
              "id": 1470,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 3535,
              "src": "98:37:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCAdjudicator.sol",
              "file": "./interfaces/ICMCAdjudicator.sol",
              "id": 1471,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 3704,
              "src": "136:42:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferDefinition.sol",
              "file": "./interfaces/ITransferDefinition.sol",
              "id": 1472,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 3954,
              "src": "179:46:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/Types.sol",
              "file": "./interfaces/Types.sol",
              "id": 1473,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 4024,
              "src": "226:32:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCCore.sol",
              "file": "./CMCCore.sol",
              "id": 1474,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 2714,
              "src": "259:23:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCAsset.sol",
              "file": "./CMCAsset.sol",
              "id": 1475,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 2584,
              "src": "283:24:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCDeposit.sol",
              "file": "./CMCDeposit.sol",
              "id": 1476,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 2871,
              "src": "308:26:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibChannelCrypto.sol",
              "file": "./lib/LibChannelCrypto.sol",
              "id": 1477,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 4284,
              "src": "335:36:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibMath.sol",
              "file": "./lib/LibMath.sol",
              "id": 1478,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 4769,
              "src": "372:27:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/cryptography/MerkleProof.sol",
              "file": "@openzeppelin/contracts/cryptography/MerkleProof.sol",
              "id": 1479,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 301,
              "src": "400:62:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
              "file": "@openzeppelin/contracts/math/SafeMath.sol",
              "id": 1480,
              "nodeType": "ImportDirective",
              "scope": 2323,
              "sourceUnit": 570,
              "src": "463:51:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1482,
                    "name": "CMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2713,
                    "src": "891:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                      "typeString": "contract CMCCore"
                    }
                  },
                  "id": 1483,
                  "nodeType": "InheritanceSpecifier",
                  "src": "891:7:10"
                },
                {
                  "baseName": {
                    "id": 1484,
                    "name": "CMCAsset",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2583,
                    "src": "900:8:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCAsset_$2583",
                      "typeString": "contract CMCAsset"
                    }
                  },
                  "id": 1485,
                  "nodeType": "InheritanceSpecifier",
                  "src": "900:8:10"
                },
                {
                  "baseName": {
                    "id": 1486,
                    "name": "CMCDeposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2870,
                    "src": "910:10:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCDeposit_$2870",
                      "typeString": "contract CMCDeposit"
                    }
                  },
                  "id": 1487,
                  "nodeType": "InheritanceSpecifier",
                  "src": "910:10:10"
                },
                {
                  "baseName": {
                    "id": 1488,
                    "name": "ICMCAdjudicator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3703,
                    "src": "922:15:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCAdjudicator_$3703",
                      "typeString": "contract ICMCAdjudicator"
                    }
                  },
                  "id": 1489,
                  "nodeType": "InheritanceSpecifier",
                  "src": "922:15:10"
                }
              ],
              "contractDependencies": [
                2583,
                2713,
                2870,
                3442,
                3703,
                3732,
                3753,
                3784
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1481,
                "nodeType": "StructuredDocumentation",
                "src": "516:348:10",
                "text": "@title CMCAdjudicator\n @author Connext <support@connext.network>\n @notice Contains logic for disputing a single channel and all active\n         transfers associated with the channel. Contains two major phases:\n         (1) consensus: settle on latest channel state\n         (2) defund: remove assets and dispute active transfers"
              },
              "fullyImplemented": true,
              "id": 2322,
              "linearizedBaseContracts": [
                2322,
                3703,
                2870,
                3784,
                2583,
                3732,
                2713,
                3753,
                3442
              ],
              "name": "CMCAdjudicator",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1492,
                  "libraryName": {
                    "id": 1490,
                    "name": "LibChannelCrypto",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4283,
                    "src": "950:16:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibChannelCrypto_$4283",
                      "typeString": "library LibChannelCrypto"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "944:35:10",
                  "typeName": {
                    "id": 1491,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "971:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                {
                  "id": 1495,
                  "libraryName": {
                    "id": 1493,
                    "name": "LibMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4768,
                    "src": "990:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibMath_$4768",
                      "typeString": "library LibMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "984:26:10",
                  "typeName": {
                    "id": 1494,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1002:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1498,
                  "libraryName": {
                    "id": 1496,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 569,
                    "src": "1021:8:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$569",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1015:27:10",
                  "typeName": {
                    "id": 1497,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1034:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 1501,
                  "mutability": "constant",
                  "name": "INITIAL_DEFUND_NONCE",
                  "nodeType": "VariableDeclaration",
                  "scope": 2322,
                  "src": "1048:49:10",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1499,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1048:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 1500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1096:1:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1503,
                  "mutability": "mutable",
                  "name": "channelDispute",
                  "nodeType": "VariableDeclaration",
                  "scope": 2322,
                  "src": "1104:37:10",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                    "typeString": "struct ICMCAdjudicator.ChannelDispute"
                  },
                  "typeName": {
                    "id": 1502,
                    "name": "ChannelDispute",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3596,
                    "src": "1104:14:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage_ptr",
                      "typeString": "struct ICMCAdjudicator.ChannelDispute"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1507,
                  "mutability": "mutable",
                  "name": "defundNonces",
                  "nodeType": "VariableDeclaration",
                  "scope": 2322,
                  "src": "1147:48:10",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1506,
                    "keyType": {
                      "id": 1504,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1155:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1147:27:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1505,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1166:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1511,
                  "mutability": "mutable",
                  "name": "transferDisputes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2322,
                  "src": "1201:60:10",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TransferDispute_$3603_storage_$",
                    "typeString": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute)"
                  },
                  "typeName": {
                    "id": 1510,
                    "keyType": {
                      "id": 1508,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1209:7:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1201:35:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TransferDispute_$3603_storage_$",
                      "typeString": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute)"
                    },
                    "valueType": {
                      "id": 1509,
                      "name": "TransferDispute",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 3603,
                      "src": "1220:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                        "typeString": "struct ICMCAdjudicator.TransferDispute"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1537,
                    "nodeType": "Block",
                    "src": "1324:213:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 1527,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 1522,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 1516,
                                      "name": "ccs",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1513,
                                      "src": "1355:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                        "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                      }
                                    },
                                    "id": 1517,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "channelAddress",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3540,
                                    "src": "1355:18:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 1520,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "1385:4:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_CMCAdjudicator_$2322",
                                          "typeString": "contract CMCAdjudicator"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_CMCAdjudicator_$2322",
                                          "typeString": "contract CMCAdjudicator"
                                        }
                                      ],
                                      "id": 1519,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1377:7:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1518,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1377:7:10",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1521,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1377:13:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "src": "1355:35:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 1526,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 1523,
                                      "name": "ccs",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1513,
                                      "src": "1410:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                        "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                      }
                                    },
                                    "id": 1524,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "alice",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3542,
                                    "src": "1410:9:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "id": 1525,
                                    "name": "alice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2597,
                                    "src": "1423:5:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "1410:18:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "1355:73:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 1531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 1528,
                                    "name": "ccs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1513,
                                    "src": "1448:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                    }
                                  },
                                  "id": 1529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "bob",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3544,
                                  "src": "1448:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 1530,
                                  "name": "bob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2599,
                                  "src": "1459:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1448:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1355:107:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c",
                              "id": 1533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1476:33:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4771cae8b9f2bb279cd6964352d69fb344218750775b35f9e87afa14dd6d924a",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_CHANNEL\""
                              },
                              "value": "CMCAdjudicator: INVALID_CHANNEL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4771cae8b9f2bb279cd6964352d69fb344218750775b35f9e87afa14dd6d924a",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_CHANNEL\""
                              }
                            ],
                            "id": 1515,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1334:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1334:185:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1535,
                        "nodeType": "ExpressionStatement",
                        "src": "1334:185:10"
                      },
                      {
                        "id": 1536,
                        "nodeType": "PlaceholderStatement",
                        "src": "1529:1:10"
                      }
                    ]
                  },
                  "id": 1538,
                  "name": "validateChannel",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1513,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 1538,
                        "src": "1293:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 1512,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "1293:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1292:31:10"
                  },
                  "src": "1268:269:10",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1554,
                    "nodeType": "Block",
                    "src": "1601:142:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1543,
                                  "name": "cts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1540,
                                  "src": "1632:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                  }
                                },
                                "id": 1544,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "channelAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3568,
                                "src": "1632:18:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 1547,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1662:4:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CMCAdjudicator_$2322",
                                      "typeString": "contract CMCAdjudicator"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_CMCAdjudicator_$2322",
                                      "typeString": "contract CMCAdjudicator"
                                    }
                                  ],
                                  "id": 1546,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1654:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1545,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1654:7:10",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1654:13:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "1632:35:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5452414e53464552",
                              "id": 1550,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1681:34:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_27faa9d5e7266d2c88dc9966f72efa66f52f5aab2e8cf9f249837a11e914e472",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_TRANSFER\""
                              },
                              "value": "CMCAdjudicator: INVALID_TRANSFER"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_27faa9d5e7266d2c88dc9966f72efa66f52f5aab2e8cf9f249837a11e914e472",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_TRANSFER\""
                              }
                            ],
                            "id": 1542,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1611:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1611:114:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1552,
                        "nodeType": "ExpressionStatement",
                        "src": "1611:114:10"
                      },
                      {
                        "id": 1553,
                        "nodeType": "PlaceholderStatement",
                        "src": "1735:1:10"
                      }
                    ]
                  },
                  "id": 1555,
                  "name": "validateTransfer",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1541,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1540,
                        "mutability": "mutable",
                        "name": "cts",
                        "nodeType": "VariableDeclaration",
                        "scope": 1555,
                        "src": "1569:30:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 1539,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "1569:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1568:32:10"
                  },
                  "src": "1543:200:10",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3649
                  ],
                  "body": {
                    "id": 1567,
                    "nodeType": "Block",
                    "src": "1915:38:10",
                    "statements": [
                      {
                        "expression": {
                          "id": 1565,
                          "name": "channelDispute",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "1932:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                            "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                          }
                        },
                        "functionReturnParameters": 1564,
                        "id": 1566,
                        "nodeType": "Return",
                        "src": "1925:21:10"
                      }
                    ]
                  },
                  "functionSelector": "f19eb10e",
                  "id": 1568,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1559,
                      "modifierName": {
                        "id": 1558,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1833:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1833:12:10"
                    },
                    {
                      "id": 1561,
                      "modifierName": {
                        "id": 1560,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "1854:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1854:16:10"
                    }
                  ],
                  "name": "getChannelDispute",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1557,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1816:8:10"
                  },
                  "parameters": {
                    "id": 1556,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1775:2:10"
                  },
                  "returnParameters": {
                    "id": 1564,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1563,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1568,
                        "src": "1888:21:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ChannelDispute_$3596_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.ChannelDispute"
                        },
                        "typeName": {
                          "id": 1562,
                          "name": "ChannelDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3596,
                          "src": "1888:14:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.ChannelDispute"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1887:23:10"
                  },
                  "scope": 2322,
                  "src": "1749:204:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3656
                  ],
                  "body": {
                    "id": 1584,
                    "nodeType": "Block",
                    "src": "2123:45:10",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1580,
                            "name": "defundNonces",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1507,
                            "src": "2140:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1582,
                          "indexExpression": {
                            "id": 1581,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1570,
                            "src": "2153:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2140:21:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1579,
                        "id": 1583,
                        "nodeType": "Return",
                        "src": "2133:28:10"
                      }
                    ]
                  },
                  "functionSelector": "e7283a8d",
                  "id": 1585,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1574,
                      "modifierName": {
                        "id": 1573,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "2055:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2055:12:10"
                    },
                    {
                      "id": 1576,
                      "modifierName": {
                        "id": 1575,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "2076:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2076:16:10"
                    }
                  ],
                  "name": "getDefundNonce",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1572,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2038:8:10"
                  },
                  "parameters": {
                    "id": 1571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1570,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 1585,
                        "src": "1983:15:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1569,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1983:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1982:17:10"
                  },
                  "returnParameters": {
                    "id": 1579,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1578,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1585,
                        "src": "2110:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1577,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2110:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2109:9:10"
                  },
                  "scope": 2322,
                  "src": "1959:209:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3663
                  ],
                  "body": {
                    "id": 1601,
                    "nodeType": "Block",
                    "src": "2360:52:10",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1597,
                            "name": "transferDisputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1511,
                            "src": "2377:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TransferDispute_$3603_storage_$",
                              "typeString": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute storage ref)"
                            }
                          },
                          "id": 1599,
                          "indexExpression": {
                            "id": 1598,
                            "name": "transferId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1587,
                            "src": "2394:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2377:28:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage",
                            "typeString": "struct ICMCAdjudicator.TransferDispute storage ref"
                          }
                        },
                        "functionReturnParameters": 1596,
                        "id": 1600,
                        "nodeType": "Return",
                        "src": "2370:35:10"
                      }
                    ]
                  },
                  "functionSelector": "3ff0da16",
                  "id": 1602,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1591,
                      "modifierName": {
                        "id": 1590,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "2277:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2277:12:10"
                    },
                    {
                      "id": 1593,
                      "modifierName": {
                        "id": 1592,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "2298:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2298:16:10"
                    }
                  ],
                  "name": "getTransferDispute",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1589,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2260:8:10"
                  },
                  "parameters": {
                    "id": 1588,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1587,
                        "mutability": "mutable",
                        "name": "transferId",
                        "nodeType": "VariableDeclaration",
                        "scope": 1602,
                        "src": "2202:18:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1586,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2202:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2201:20:10"
                  },
                  "returnParameters": {
                    "id": 1596,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1595,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1602,
                        "src": "2332:22:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TransferDispute_$3603_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.TransferDispute"
                        },
                        "typeName": {
                          "id": 1594,
                          "name": "TransferDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3603,
                          "src": "2332:15:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.TransferDispute"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2331:24:10"
                  },
                  "scope": 2322,
                  "src": "2174:238:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3672
                  ],
                  "body": {
                    "id": 1705,
                    "nodeType": "Block",
                    "src": "2628:1193:10",
                    "statements": [
                      {
                        "assignments": [
                          1620
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1620,
                            "mutability": "mutable",
                            "name": "ccsHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 1705,
                            "src": "2663:15:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1619,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2663:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1624,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1622,
                              "name": "ccs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "2698:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            ],
                            "id": 1621,
                            "name": "hashChannelState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2306,
                            "src": "2681:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_CoreChannelState_$3566_calldata_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (struct ICMCAdjudicator.CoreChannelState calldata) pure returns (bytes32)"
                            }
                          },
                          "id": 1623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2681:21:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2663:39:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1626,
                              "name": "ccs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "2815:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            },
                            {
                              "id": 1627,
                              "name": "ccsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1620,
                              "src": "2820:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1628,
                              "name": "aliceSignature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1606,
                              "src": "2829:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 1629,
                              "name": "bobSignature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1608,
                              "src": "2845:12:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 1625,
                            "name": "verifySignaturesOnChannelStateHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2240,
                            "src": "2780:34:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_CoreChannelState_$3566_calldata_ptr_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                              "typeString": "function (struct ICMCAdjudicator.CoreChannelState calldata,bytes32,bytes calldata,bytes calldata) pure"
                            }
                          },
                          "id": 1630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2780:78:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1631,
                        "nodeType": "ExpressionStatement",
                        "src": "2780:78:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "2936:16:10",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1633,
                                  "name": "inDefundPhase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2291,
                                  "src": "2937:13:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                    "typeString": "function () view returns (bool)"
                                  }
                                },
                                "id": 1634,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2937:15:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5048415345",
                              "id": 1636,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2954:31:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_182fac5c41d8e75fabf00aa3e716e1f4ceff44591890e57c74f920939d51ed63",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_PHASE\""
                              },
                              "value": "CMCAdjudicator: INVALID_PHASE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_182fac5c41d8e75fabf00aa3e716e1f4ceff44591890e57c74f920939d51ed63",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_PHASE\""
                              }
                            ],
                            "id": 1632,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2928:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2928:58:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1638,
                        "nodeType": "ExpressionStatement",
                        "src": "2928:58:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1644,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1640,
                                  "name": "channelDispute",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1503,
                                  "src": "3084:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                    "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                  }
                                },
                                "id": 1641,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "nonce",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3589,
                                "src": "3084:20:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "expression": {
                                  "id": 1642,
                                  "name": "ccs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1604,
                                  "src": "3107:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                  }
                                },
                                "id": 1643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "nonce",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3563,
                                "src": "3107:9:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3084:32:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f4e4f4e4345",
                              "id": 1645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3130:31:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_28daa1a8003bca9bc214dfa954b2b6af796b1b3cd3eeba496f7d61f5a1c63ce4",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_NONCE\""
                              },
                              "value": "CMCAdjudicator: INVALID_NONCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_28daa1a8003bca9bc214dfa954b2b6af796b1b3cd3eeba496f7d61f5a1c63ce4",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_NONCE\""
                              }
                            ],
                            "id": 1639,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3063:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3063:108:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1647,
                        "nodeType": "ExpressionStatement",
                        "src": "3063:108:10"
                      },
                      {
                        "condition": {
                          "id": 1650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "3186:19:10",
                          "subExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1648,
                              "name": "inConsensusPhase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2273,
                              "src": "3187:16:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                "typeString": "function () view returns (bool)"
                              }
                            },
                            "id": 1649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3187:18:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1677,
                        "nodeType": "IfStatement",
                        "src": "3182:372:10",
                        "trueBody": {
                          "id": 1676,
                          "nodeType": "Block",
                          "src": "3207:347:10",
                          "statements": [
                            {
                              "expression": {
                                "id": 1660,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 1651,
                                    "name": "channelDispute",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1503,
                                    "src": "3365:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                      "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                    }
                                  },
                                  "id": 1653,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "consensusExpiry",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3593,
                                  "src": "3365:30:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 1657,
                                        "name": "ccs",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1604,
                                        "src": "3418:3:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                          "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                        }
                                      },
                                      "id": 1658,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timeout",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3561,
                                      "src": "3418:11:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "expression": {
                                        "id": 1654,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "3398:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 1655,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "3398:15:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1656,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 402,
                                    "src": "3398:19:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1659,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3398:32:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3365:65:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1661,
                              "nodeType": "ExpressionStatement",
                              "src": "3365:65:10"
                            },
                            {
                              "expression": {
                                "id": 1674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 1662,
                                    "name": "channelDispute",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1503,
                                    "src": "3444:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                      "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                    }
                                  },
                                  "id": 1664,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "defundExpiry",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3595,
                                  "src": "3444:27:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "32",
                                          "id": 1671,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3527:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          }
                                        ],
                                        "expression": {
                                          "expression": {
                                            "id": 1668,
                                            "name": "ccs",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1604,
                                            "src": "3511:3:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                              "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                            }
                                          },
                                          "id": 1669,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "timeout",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3561,
                                          "src": "3511:11:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1670,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 482,
                                        "src": "3511:15:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1672,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3511:18:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "expression": {
                                        "id": 1665,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "3474:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 1666,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "3474:15:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1667,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 402,
                                    "src": "3474:19:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1673,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3474:69:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3444:99:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1675,
                              "nodeType": "ExpressionStatement",
                              "src": "3444:99:10"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1678,
                              "name": "channelDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "3593:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            },
                            "id": 1680,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "channelStateHash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3587,
                            "src": "3593:31:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1681,
                            "name": "ccsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1620,
                            "src": "3627:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3593:41:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1683,
                        "nodeType": "ExpressionStatement",
                        "src": "3593:41:10"
                      },
                      {
                        "expression": {
                          "id": 1689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1684,
                              "name": "channelDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "3644:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            },
                            "id": 1686,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nonce",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3589,
                            "src": "3644:20:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1687,
                              "name": "ccs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "3667:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            },
                            "id": 1688,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "nonce",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3563,
                            "src": "3667:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3644:32:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1690,
                        "nodeType": "ExpressionStatement",
                        "src": "3644:32:10"
                      },
                      {
                        "expression": {
                          "id": 1696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1691,
                              "name": "channelDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "3686:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            },
                            "id": 1693,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "merkleRoot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3591,
                            "src": "3686:25:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1694,
                              "name": "ccs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "3714:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            },
                            "id": 1695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "merkleRoot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3565,
                            "src": "3714:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3686:42:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1697,
                        "nodeType": "ExpressionStatement",
                        "src": "3686:42:10"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1699,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3782:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1700,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3782:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 1701,
                              "name": "ccs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "3794:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            },
                            {
                              "id": 1702,
                              "name": "channelDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "3799:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              },
                              {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            ],
                            "id": 1698,
                            "name": "ChannelDisputed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3611,
                            "src": "3766:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_struct$_CoreChannelState_$3566_memory_ptr_$_t_struct$_ChannelDispute_$3596_memory_ptr_$returns$__$",
                              "typeString": "function (address,struct ICMCAdjudicator.CoreChannelState memory,struct ICMCAdjudicator.ChannelDispute memory)"
                            }
                          },
                          "id": 1703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3766:48:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1704,
                        "nodeType": "EmitStatement",
                        "src": "3761:53:10"
                      }
                    ]
                  },
                  "functionSelector": "c60939be",
                  "id": 1706,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1612,
                      "modifierName": {
                        "id": 1611,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "2581:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2581:12:10"
                    },
                    {
                      "id": 1614,
                      "modifierName": {
                        "id": 1613,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "2594:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2594:12:10"
                    },
                    {
                      "arguments": [
                        {
                          "id": 1616,
                          "name": "ccs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1604,
                          "src": "2623:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                          }
                        }
                      ],
                      "id": 1617,
                      "modifierName": {
                        "id": 1615,
                        "name": "validateChannel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1538,
                        "src": "2607:15:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_struct$_CoreChannelState_$3566_calldata_ptr_$",
                          "typeString": "modifier (struct ICMCAdjudicator.CoreChannelState calldata)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2607:20:10"
                    }
                  ],
                  "name": "disputeChannel",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1610,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2572:8:10"
                  },
                  "parameters": {
                    "id": 1609,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1604,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 1706,
                        "src": "2451:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 1603,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "2451:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1606,
                        "mutability": "mutable",
                        "name": "aliceSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 1706,
                        "src": "2490:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1605,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2490:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1608,
                        "mutability": "mutable",
                        "name": "bobSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 1706,
                        "src": "2529:27:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1607,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2529:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2441:121:10"
                  },
                  "returnParameters": {
                    "id": 1618,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2628:0:10"
                  },
                  "scope": 2322,
                  "src": "2418:1403:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3683
                  ],
                  "body": {
                    "id": 1957,
                    "nodeType": "Block",
                    "src": "4033:3777:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1726,
                                  "name": "assetIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1711,
                                  "src": "4135:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1727,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "4135:15:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4153:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "4135:19:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a204e4f5f4153534554535f474956454e",
                              "id": 1730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4156:33:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3d7d1e6fa5393b9b1d921daa94babec78902197cf8a9cf6fa6884d72c9032113",
                                "typeString": "literal_string \"CMCAdjudicator: NO_ASSETS_GIVEN\""
                              },
                              "value": "CMCAdjudicator: NO_ASSETS_GIVEN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3d7d1e6fa5393b9b1d921daa94babec78902197cf8a9cf6fa6884d72c9032113",
                                "typeString": "literal_string \"CMCAdjudicator: NO_ASSETS_GIVEN\""
                              }
                            ],
                            "id": 1725,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4127:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4127:63:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1732,
                        "nodeType": "ExpressionStatement",
                        "src": "4127:63:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1734,
                                  "name": "indices",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1714,
                                  "src": "4221:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 1735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "4221:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "expression": {
                                  "id": 1736,
                                  "name": "assetIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1711,
                                  "src": "4239:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1737,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "4239:15:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4221:33:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a2057524f4e475f41525241595f4c454e47544853",
                              "id": 1739,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4268:37:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_db2f2aafff4fd8ad5e6d0e39c315ebeb6aa333d95015702ff4feaf6fe28e21d0",
                                "typeString": "literal_string \"CMCAdjudicator: WRONG_ARRAY_LENGTHS\""
                              },
                              "value": "CMCAdjudicator: WRONG_ARRAY_LENGTHS"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_db2f2aafff4fd8ad5e6d0e39c315ebeb6aa333d95015702ff4feaf6fe28e21d0",
                                "typeString": "literal_string \"CMCAdjudicator: WRONG_ARRAY_LENGTHS\""
                              }
                            ],
                            "id": 1733,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4200:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4200:115:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1741,
                        "nodeType": "ExpressionStatement",
                        "src": "4200:115:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 1748,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 1744,
                                    "name": "ccs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1708,
                                    "src": "4434:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                    }
                                  ],
                                  "id": 1743,
                                  "name": "hashChannelState",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2306,
                                  "src": "4417:16:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_CoreChannelState_$3566_calldata_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (struct ICMCAdjudicator.CoreChannelState calldata) pure returns (bytes32)"
                                  }
                                },
                                "id": 1745,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4417:21:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 1746,
                                  "name": "channelDispute",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1503,
                                  "src": "4442:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                    "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                  }
                                },
                                "id": 1747,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "channelStateHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3587,
                                "src": "4442:31:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "4417:56:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f4348414e4e454c5f48415348",
                              "id": 1749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4487:38:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0ac958ee2b017ab4e35b001a5e91bafb0a0af2d4808227f2ca6fad970a371136",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_CHANNEL_HASH\""
                              },
                              "value": "CMCAdjudicator: INVALID_CHANNEL_HASH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0ac958ee2b017ab4e35b001a5e91bafb0a0af2d4808227f2ca6fad970a371136",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_CHANNEL_HASH\""
                              }
                            ],
                            "id": 1742,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4396:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4396:139:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1751,
                        "nodeType": "ExpressionStatement",
                        "src": "4396:139:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1753,
                                "name": "inDefundPhase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "4604:13:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 1754,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4604:15:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5048415345",
                              "id": 1755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4621:31:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_182fac5c41d8e75fabf00aa3e716e1f4ceff44591890e57c74f920939d51ed63",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_PHASE\""
                              },
                              "value": "CMCAdjudicator: INVALID_PHASE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_182fac5c41d8e75fabf00aa3e716e1f4ceff44591890e57c74f920939d51ed63",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_PHASE\""
                              }
                            ],
                            "id": 1752,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4596:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1756,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4596:57:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1757,
                        "nodeType": "ExpressionStatement",
                        "src": "4596:57:10"
                      },
                      {
                        "body": {
                          "id": 1947,
                          "nodeType": "Block",
                          "src": "5059:2613:10",
                          "statements": [
                            {
                              "assignments": [
                                1770
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1770,
                                  "mutability": "mutable",
                                  "name": "assetId",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1947,
                                  "src": "5073:15:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1769,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5073:7:10",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1774,
                              "initialValue": {
                                "baseExpression": {
                                  "id": 1771,
                                  "name": "assetIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1711,
                                  "src": "5091:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1773,
                                "indexExpression": {
                                  "id": 1772,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1759,
                                  "src": "5100:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5091:11:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5073:29:10"
                            },
                            {
                              "assignments": [
                                1776
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1776,
                                  "mutability": "mutable",
                                  "name": "index",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1947,
                                  "src": "5192:13:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1775,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5192:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1777,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5192:13:10"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1781,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1778,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1759,
                                  "src": "5223:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 1779,
                                    "name": "indices",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1714,
                                    "src": "5227:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                      "typeString": "uint256[] calldata"
                                    }
                                  },
                                  "id": 1780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "5227:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5223:18:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1822,
                                "nodeType": "Block",
                                "src": "5512:271:10",
                                "statements": [
                                  {
                                    "body": {
                                      "id": 1820,
                                      "nodeType": "Block",
                                      "src": "5639:130:10",
                                      "statements": [
                                        {
                                          "condition": {
                                            "commonType": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            "id": 1816,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 1811,
                                              "name": "assetId",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1770,
                                              "src": "5665:7:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "baseExpression": {
                                                "expression": {
                                                  "id": 1812,
                                                  "name": "ccs",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1708,
                                                  "src": "5676:3:10",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                    "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                  }
                                                },
                                                "id": 1813,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "assetIds",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3547,
                                                "src": "5676:12:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                  "typeString": "address[] calldata"
                                                }
                                              },
                                              "id": 1815,
                                              "indexExpression": {
                                                "id": 1814,
                                                "name": "index",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1776,
                                                "src": "5689:5:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "5676:19:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "src": "5665:30:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "id": 1819,
                                          "nodeType": "IfStatement",
                                          "src": "5661:90:10",
                                          "trueBody": {
                                            "id": 1818,
                                            "nodeType": "Block",
                                            "src": "5697:54:10",
                                            "statements": [
                                              {
                                                "id": 1817,
                                                "nodeType": "Break",
                                                "src": "5723:5:10"
                                              }
                                            ]
                                          }
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1807,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1803,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1776,
                                        "src": "5601:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "expression": {
                                          "expression": {
                                            "id": 1804,
                                            "name": "ccs",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1708,
                                            "src": "5609:3:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                              "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                            }
                                          },
                                          "id": 1805,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "assetIds",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3547,
                                          "src": "5609:12:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                            "typeString": "address[] calldata"
                                          }
                                        },
                                        "id": 1806,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "5609:19:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "5601:27:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1821,
                                    "initializationExpression": {
                                      "expression": {
                                        "id": 1801,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 1799,
                                          "name": "index",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1776,
                                          "src": "5590:5:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "hexValue": "30",
                                          "id": 1800,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5598:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "5590:9:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1802,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5590:9:10"
                                    },
                                    "loopExpression": {
                                      "expression": {
                                        "id": 1809,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "++",
                                        "prefix": false,
                                        "src": "5630:7:10",
                                        "subExpression": {
                                          "id": 1808,
                                          "name": "index",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1776,
                                          "src": "5630:5:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1810,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5630:7:10"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "5585:184:10"
                                  }
                                ]
                              },
                              "id": 1823,
                              "nodeType": "IfStatement",
                              "src": "5219:564:10",
                              "trueBody": {
                                "id": 1798,
                                "nodeType": "Block",
                                "src": "5243:263:10",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1786,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1782,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1776,
                                        "src": "5324:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 1783,
                                          "name": "indices",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1714,
                                          "src": "5332:7:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                            "typeString": "uint256[] calldata"
                                          }
                                        },
                                        "id": 1785,
                                        "indexExpression": {
                                          "id": 1784,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1759,
                                          "src": "5340:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5332:10:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "5324:18:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1787,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5324:18:10"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          "id": 1794,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1789,
                                            "name": "assetId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1770,
                                            "src": "5389:7:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "baseExpression": {
                                              "expression": {
                                                "id": 1790,
                                                "name": "ccs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1708,
                                                "src": "5400:3:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                  "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                }
                                              },
                                              "id": 1791,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "assetIds",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3547,
                                              "src": "5400:12:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                "typeString": "address[] calldata"
                                              }
                                            },
                                            "id": 1793,
                                            "indexExpression": {
                                              "id": 1792,
                                              "name": "index",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1776,
                                              "src": "5413:5:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5400:19:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "5389:30:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        {
                                          "hexValue": "434d4341646a7564696361746f723a20494e4445585f4d49534d41544348",
                                          "id": 1795,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5441:32:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_0e52b3fbe077ce9834a263ed0f3b3c840094804ae1f047d1e43764b3ed2b897a",
                                            "typeString": "literal_string \"CMCAdjudicator: INDEX_MISMATCH\""
                                          },
                                          "value": "CMCAdjudicator: INDEX_MISMATCH"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          },
                                          {
                                            "typeIdentifier": "t_stringliteral_0e52b3fbe077ce9834a263ed0f3b3c840094804ae1f047d1e43764b3ed2b897a",
                                            "typeString": "literal_string \"CMCAdjudicator: INDEX_MISMATCH\""
                                          }
                                        ],
                                        "id": 1788,
                                        "name": "require",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -18,
                                          -18
                                        ],
                                        "referencedDeclaration": -18,
                                        "src": "5360:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (bool,string memory) pure"
                                        }
                                      },
                                      "id": 1796,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5360:131:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1797,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5360:131:10"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 1854,
                              "nodeType": "Block",
                              "src": "6117:487:10",
                              "statements": [
                                {
                                  "assignments": [
                                    1825
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 1825,
                                      "mutability": "mutable",
                                      "name": "defundNonce",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 1854,
                                      "src": "6203:19:10",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 1824,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6203:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    }
                                  ],
                                  "id": 1838,
                                  "initialValue": {
                                    "condition": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1830,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1826,
                                            "name": "index",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1776,
                                            "src": "6246:5:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 1827,
                                                "name": "ccs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1708,
                                                "src": "6255:3:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                  "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                }
                                              },
                                              "id": 1828,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "assetIds",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3547,
                                              "src": "6255:12:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                "typeString": "address[] calldata"
                                              }
                                            },
                                            "id": 1829,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "6255:19:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "6246:28:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        }
                                      ],
                                      "id": 1831,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "6245:30:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 1833,
                                          "name": "ccs",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1708,
                                          "src": "6349:3:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                            "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                          }
                                        },
                                        "id": 1834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "defundNonces",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3559,
                                        "src": "6349:16:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                          "typeString": "uint256[] calldata"
                                        }
                                      },
                                      "id": 1836,
                                      "indexExpression": {
                                        "id": 1835,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1776,
                                        "src": "6366:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "6349:23:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1837,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "6245:127:10",
                                    "trueExpression": {
                                      "id": 1832,
                                      "name": "INITIAL_DEFUND_NONCE",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1501,
                                      "src": "6302:20:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "6203:169:10"
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1844,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "baseExpression": {
                                            "id": 1840,
                                            "name": "defundNonces",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1507,
                                            "src": "6419:12:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 1842,
                                          "indexExpression": {
                                            "id": 1841,
                                            "name": "assetId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1770,
                                            "src": "6432:7:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "6419:21:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 1843,
                                          "name": "defundNonce",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1825,
                                          "src": "6443:11:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "6419:35:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      {
                                        "hexValue": "434d4341646a7564696361746f723a204348414e4e454c5f414c52454144595f444546554e444544",
                                        "id": 1845,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6476:42:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_5eadc8df2216155da7760935f07b3c02d948df4cc706c9f10627dea908202458",
                                          "typeString": "literal_string \"CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED\""
                                        },
                                        "value": "CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_5eadc8df2216155da7760935f07b3c02d948df4cc706c9f10627dea908202458",
                                          "typeString": "literal_string \"CMCAdjudicator: CHANNEL_ALREADY_DEFUNDED\""
                                        }
                                      ],
                                      "id": 1839,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "src": "6390:7:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (bool,string memory) pure"
                                      }
                                    },
                                    "id": 1846,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6390:146:10",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 1847,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6390:146:10"
                                },
                                {
                                  "expression": {
                                    "id": 1852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "id": 1848,
                                        "name": "defundNonces",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1507,
                                        "src": "6554:12:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 1850,
                                      "indexExpression": {
                                        "id": 1849,
                                        "name": "assetId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1770,
                                        "src": "6567:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "6554:21:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 1851,
                                      "name": "defundNonce",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1825,
                                      "src": "6578:11:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6554:35:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1853,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6554:35:10"
                                }
                              ]
                            },
                            {
                              "assignments": [
                                1856
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1856,
                                  "mutability": "mutable",
                                  "name": "tdAlice",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1947,
                                  "src": "6652:15:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1855,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6652:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1860,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1858,
                                    "name": "assetId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1770,
                                    "src": "6693:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1857,
                                  "name": "_getTotalDepositsAlice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2769,
                                  "src": "6670:22:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 1859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6670:31:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6652:49:10"
                            },
                            {
                              "assignments": [
                                1862
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1862,
                                  "mutability": "mutable",
                                  "name": "tdBob",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1947,
                                  "src": "6715:13:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1861,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6715:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1866,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1864,
                                    "name": "assetId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1770,
                                    "src": "6752:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1863,
                                  "name": "_getTotalDepositsBob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2807,
                                  "src": "6731:20:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 1865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6731:29:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6715:45:10"
                            },
                            {
                              "assignments": [
                                1868
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1868,
                                  "mutability": "mutable",
                                  "name": "balance",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1947,
                                  "src": "6775:22:10",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                    "typeString": "struct Balance"
                                  },
                                  "typeName": {
                                    "id": 1867,
                                    "name": "Balance",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 4023,
                                    "src": "6775:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                                      "typeString": "struct Balance"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1869,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6775:22:10"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1874,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1870,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1776,
                                  "src": "6816:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 1871,
                                      "name": "ccs",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1708,
                                      "src": "6825:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                        "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                      }
                                    },
                                    "id": 1872,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "assetIds",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3547,
                                    "src": "6825:12:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 1873,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "6825:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6816:28:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1940,
                                "nodeType": "Block",
                                "src": "7122:442:10",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1900,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1895,
                                        "name": "balance",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1868,
                                        "src": "7196:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                          "typeString": "struct Balance memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 1896,
                                            "name": "ccs",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1708,
                                            "src": "7206:3:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                              "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                            }
                                          },
                                          "id": 1897,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "balances",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3550,
                                          "src": "7206:12:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_Balance_$4023_calldata_ptr_$dyn_calldata_ptr",
                                            "typeString": "struct Balance calldata[] calldata"
                                          }
                                        },
                                        "id": 1899,
                                        "indexExpression": {
                                          "id": 1898,
                                          "name": "index",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1776,
                                          "src": "7219:5:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "7206:19:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Balance_$4023_calldata_ptr",
                                          "typeString": "struct Balance calldata"
                                        }
                                      },
                                      "src": "7196:29:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 1901,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7196:29:10"
                                  },
                                  {
                                    "expression": {
                                      "id": 1919,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 1902,
                                            "name": "balance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1868,
                                            "src": "7287:7:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                              "typeString": "struct Balance memory"
                                            }
                                          },
                                          "id": 1905,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "amount",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 4018,
                                          "src": "7287:14:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                            "typeString": "uint256[2] memory"
                                          }
                                        },
                                        "id": 1906,
                                        "indexExpression": {
                                          "hexValue": "30",
                                          "id": 1904,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "7302:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "7287:17:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 1917,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 1912,
                                              "name": "tdAlice",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1856,
                                              "src": "7353:7:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "baseExpression": {
                                                "expression": {
                                                  "id": 1913,
                                                  "name": "ccs",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1708,
                                                  "src": "7363:3:10",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                    "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                  }
                                                },
                                                "id": 1914,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "processedDepositsA",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3553,
                                                "src": "7363:22:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                  "typeString": "uint256[] calldata"
                                                }
                                              },
                                              "id": 1916,
                                              "indexExpression": {
                                                "id": 1915,
                                                "name": "index",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1776,
                                                "src": "7386:5:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "7363:29:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "7353:39:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "baseExpression": {
                                              "expression": {
                                                "id": 1907,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1868,
                                                "src": "7307:7:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                                  "typeString": "struct Balance memory"
                                                }
                                              },
                                              "id": 1908,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "amount",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 4018,
                                              "src": "7307:14:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                                "typeString": "uint256[2] memory"
                                              }
                                            },
                                            "id": 1910,
                                            "indexExpression": {
                                              "hexValue": "30",
                                              "id": 1909,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "7322:1:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                              },
                                              "value": "0"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "7307:17:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 1911,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "satAdd",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 4767,
                                          "src": "7307:24:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 1918,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7307:103:10",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7287:123:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1920,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7287:123:10"
                                  },
                                  {
                                    "expression": {
                                      "id": 1938,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 1921,
                                            "name": "balance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1868,
                                            "src": "7428:7:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                              "typeString": "struct Balance memory"
                                            }
                                          },
                                          "id": 1924,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "amount",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 4018,
                                          "src": "7428:14:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                            "typeString": "uint256[2] memory"
                                          }
                                        },
                                        "id": 1925,
                                        "indexExpression": {
                                          "hexValue": "31",
                                          "id": 1923,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "7443:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "7428:17:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 1936,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 1931,
                                              "name": "tdBob",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1862,
                                              "src": "7494:5:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "baseExpression": {
                                                "expression": {
                                                  "id": 1932,
                                                  "name": "ccs",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1708,
                                                  "src": "7502:3:10",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                    "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                  }
                                                },
                                                "id": 1933,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "processedDepositsB",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3556,
                                                "src": "7502:22:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                  "typeString": "uint256[] calldata"
                                                }
                                              },
                                              "id": 1935,
                                              "indexExpression": {
                                                "id": 1934,
                                                "name": "index",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1776,
                                                "src": "7525:5:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "7502:29:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "7494:37:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "baseExpression": {
                                              "expression": {
                                                "id": 1926,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1868,
                                                "src": "7448:7:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                                  "typeString": "struct Balance memory"
                                                }
                                              },
                                              "id": 1927,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "amount",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 4018,
                                              "src": "7448:14:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                                "typeString": "uint256[2] memory"
                                              }
                                            },
                                            "id": 1929,
                                            "indexExpression": {
                                              "hexValue": "31",
                                              "id": 1928,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "7463:1:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "7448:17:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 1930,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "satAdd",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 4767,
                                          "src": "7448:24:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 1937,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7448:101:10",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7428:121:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1939,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7428:121:10"
                                  }
                                ]
                              },
                              "id": 1941,
                              "nodeType": "IfStatement",
                              "src": "6812:752:10",
                              "trueBody": {
                                "id": 1894,
                                "nodeType": "Block",
                                "src": "6846:270:10",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1892,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1875,
                                        "name": "balance",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1868,
                                        "src": "6954:7:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                          "typeString": "struct Balance memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "components": [
                                              {
                                                "id": 1877,
                                                "name": "tdAlice",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1856,
                                                "src": "7003:7:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              {
                                                "id": 1878,
                                                "name": "tdBob",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1862,
                                                "src": "7012:5:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "id": 1879,
                                            "isConstant": false,
                                            "isInlineArray": true,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "7002:16:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                              "typeString": "uint256[2] memory"
                                            }
                                          },
                                          {
                                            "components": [
                                              {
                                                "arguments": [
                                                  {
                                                    "expression": {
                                                      "id": 1882,
                                                      "name": "ccs",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 1708,
                                                      "src": "7053:3:10",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                        "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                      }
                                                    },
                                                    "id": 1883,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "alice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3542,
                                                    "src": "7053:9:10",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "id": 1881,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "7045:8:10",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                                    "typeString": "type(address payable)"
                                                  },
                                                  "typeName": {
                                                    "id": 1880,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7045:8:10",
                                                    "stateMutability": "payable",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                "id": 1884,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7045:18:10",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "expression": {
                                                      "id": 1887,
                                                      "name": "ccs",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 1708,
                                                      "src": "7073:3:10",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                                        "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                                      }
                                                    },
                                                    "id": 1888,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "bob",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3544,
                                                    "src": "7073:7:10",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "id": 1886,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "7065:8:10",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                                    "typeString": "type(address payable)"
                                                  },
                                                  "typeName": {
                                                    "id": 1885,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7065:8:10",
                                                    "stateMutability": "payable",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                "id": 1889,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7065:16:10",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              }
                                            ],
                                            "id": 1890,
                                            "isConstant": false,
                                            "isInlineArray": true,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "7044:38:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_payable_$2_memory_ptr",
                                              "typeString": "address payable[2] memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                              "typeString": "uint256[2] memory"
                                            },
                                            {
                                              "typeIdentifier": "t_array$_t_address_payable_$2_memory_ptr",
                                              "typeString": "address payable[2] memory"
                                            }
                                          ],
                                          "id": 1876,
                                          "name": "Balance",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4023,
                                          "src": "6964:7:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                            "typeString": "type(struct Balance storage pointer)"
                                          }
                                        },
                                        "id": 1891,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "structConstructorCall",
                                        "lValueRequested": false,
                                        "names": [
                                          "amount",
                                          "to"
                                        ],
                                        "nodeType": "FunctionCall",
                                        "src": "6964:137:10",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                          "typeString": "struct Balance memory"
                                        }
                                      },
                                      "src": "6954:147:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 1893,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6954:147:10"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1943,
                                    "name": "assetId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1770,
                                    "src": "7644:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1944,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1868,
                                    "src": "7653:7:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  ],
                                  "id": 1942,
                                  "name": "makeBalanceExitable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2451,
                                  "src": "7624:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Balance_$4023_memory_ptr_$returns$__$",
                                    "typeString": "function (address,struct Balance memory)"
                                  }
                                },
                                "id": 1945,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7624:37:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1946,
                              "nodeType": "ExpressionStatement",
                              "src": "7624:37:10"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1762,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1759,
                            "src": "5033:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 1763,
                              "name": "assetIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1711,
                              "src": "5037:8:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "5037:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5033:19:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1948,
                        "initializationExpression": {
                          "assignments": [
                            1759
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1759,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 1948,
                              "src": "5018:9:10",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1758,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5018:7:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 1761,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 1760,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5030:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5018:13:10"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 1767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5054:3:10",
                            "subExpression": {
                              "id": 1766,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1759,
                              "src": "5054:1:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1768,
                          "nodeType": "ExpressionStatement",
                          "src": "5054:3:10"
                        },
                        "nodeType": "ForStatement",
                        "src": "5013:2659:10"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1950,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "7716:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7716:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 1952,
                              "name": "ccs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1708,
                              "src": "7740:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              }
                            },
                            {
                              "id": 1953,
                              "name": "channelDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "7757:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            },
                            {
                              "id": 1954,
                              "name": "assetIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1711,
                              "src": "7785:8:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                              },
                              {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            ],
                            "id": 1949,
                            "name": "ChannelDefunded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3622,
                            "src": "7687:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_struct$_CoreChannelState_$3566_memory_ptr_$_t_struct$_ChannelDispute_$3596_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address,struct ICMCAdjudicator.CoreChannelState memory,struct ICMCAdjudicator.ChannelDispute memory,address[] memory)"
                            }
                          },
                          "id": 1955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7687:116:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1956,
                        "nodeType": "EmitStatement",
                        "src": "7682:121:10"
                      }
                    ]
                  },
                  "functionSelector": "4d3fcbda",
                  "id": 1958,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1718,
                      "modifierName": {
                        "id": 1717,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "3986:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3986:12:10"
                    },
                    {
                      "id": 1720,
                      "modifierName": {
                        "id": 1719,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "3999:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3999:12:10"
                    },
                    {
                      "arguments": [
                        {
                          "id": 1722,
                          "name": "ccs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1708,
                          "src": "4028:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                          }
                        }
                      ],
                      "id": 1723,
                      "modifierName": {
                        "id": 1721,
                        "name": "validateChannel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1538,
                        "src": "4012:15:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_struct$_CoreChannelState_$3566_calldata_ptr_$",
                          "typeString": "modifier (struct ICMCAdjudicator.CoreChannelState calldata)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4012:20:10"
                    }
                  ],
                  "name": "defundChannel",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1716,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3977:8:10"
                  },
                  "parameters": {
                    "id": 1715,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1708,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 1958,
                        "src": "3859:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 1707,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "3859:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1711,
                        "mutability": "mutable",
                        "name": "assetIds",
                        "nodeType": "VariableDeclaration",
                        "scope": 1958,
                        "src": "3898:27:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1709,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3898:7:10",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1710,
                          "nodeType": "ArrayTypeName",
                          "src": "3898:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1714,
                        "mutability": "mutable",
                        "name": "indices",
                        "nodeType": "VariableDeclaration",
                        "scope": 1958,
                        "src": "3935:26:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1712,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3935:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1713,
                          "nodeType": "ArrayTypeName",
                          "src": "3935:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3849:118:10"
                  },
                  "returnParameters": {
                    "id": 1724,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4033:0:10"
                  },
                  "scope": 2322,
                  "src": "3827:3983:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3691
                  ],
                  "body": {
                    "id": 2032,
                    "nodeType": "Block",
                    "src": "7997:1211:10",
                    "statements": [
                      {
                        "assignments": [
                          1975
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1975,
                            "mutability": "mutable",
                            "name": "transferStateHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 2032,
                            "src": "8100:25:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1974,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "8100:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1979,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1977,
                              "name": "cts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1960,
                              "src": "8146:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              }
                            ],
                            "id": 1976,
                            "name": "hashTransferState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2321,
                            "src": "8128:17:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_CoreTransferState_$3585_calldata_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (struct ICMCAdjudicator.CoreTransferState calldata) pure returns (bytes32)"
                            }
                          },
                          "id": 1978,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8128:22:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8100:50:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1981,
                              "name": "merkleProofData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1963,
                              "src": "8191:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            {
                              "expression": {
                                "id": 1982,
                                "name": "channelDispute",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1503,
                                "src": "8220:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                  "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                }
                              },
                              "id": 1983,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "merkleRoot",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3591,
                              "src": "8220:25:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1984,
                              "name": "transferStateHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1975,
                              "src": "8259:17:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1980,
                            "name": "verifyMerkleProof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2261,
                            "src": "8160:17:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32[] calldata,bytes32,bytes32) pure"
                            }
                          },
                          "id": 1985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8160:126:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1986,
                        "nodeType": "ExpressionStatement",
                        "src": "8160:126:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1988,
                                "name": "inDefundPhase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2291,
                                "src": "8400:13:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 1989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8400:15:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5048415345",
                              "id": 1990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8417:31:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_182fac5c41d8e75fabf00aa3e716e1f4ceff44591890e57c74f920939d51ed63",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_PHASE\""
                              },
                              "value": "CMCAdjudicator: INVALID_PHASE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_182fac5c41d8e75fabf00aa3e716e1f4ceff44591890e57c74f920939d51ed63",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_PHASE\""
                              }
                            ],
                            "id": 1987,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8392:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8392:57:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1992,
                        "nodeType": "ExpressionStatement",
                        "src": "8392:57:10"
                      },
                      {
                        "assignments": [
                          1994
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1994,
                            "mutability": "mutable",
                            "name": "transferDispute",
                            "nodeType": "VariableDeclaration",
                            "scope": 2032,
                            "src": "8508:39:10",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                              "typeString": "struct ICMCAdjudicator.TransferDispute"
                            },
                            "typeName": {
                              "id": 1993,
                              "name": "TransferDispute",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3603,
                              "src": "8508:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1999,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1995,
                            "name": "transferDisputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1511,
                            "src": "8562:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TransferDispute_$3603_storage_$",
                              "typeString": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute storage ref)"
                            }
                          },
                          "id": 1998,
                          "indexExpression": {
                            "expression": {
                              "id": 1996,
                              "name": "cts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1960,
                              "src": "8579:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              }
                            },
                            "id": 1997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3570,
                            "src": "8579:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8562:32:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage",
                            "typeString": "struct ICMCAdjudicator.TransferDispute storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8508:86:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2001,
                                  "name": "transferDispute",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1994,
                                  "src": "8692:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                    "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                                  }
                                },
                                "id": 2002,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferDisputeExpiry",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3600,
                                "src": "8692:37:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2003,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8733:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8692:42:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a205452414e534645525f414c52454144595f4449535055544544",
                              "id": 2005,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8748:43:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ba57f759ca562b629494c7e18196f82e16d191355b03f38b02be18e976e9d87d",
                                "typeString": "literal_string \"CMCAdjudicator: TRANSFER_ALREADY_DISPUTED\""
                              },
                              "value": "CMCAdjudicator: TRANSFER_ALREADY_DISPUTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ba57f759ca562b629494c7e18196f82e16d191355b03f38b02be18e976e9d87d",
                                "typeString": "literal_string \"CMCAdjudicator: TRANSFER_ALREADY_DISPUTED\""
                              }
                            ],
                            "id": 2000,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8671:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8671:130:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2007,
                        "nodeType": "ExpressionStatement",
                        "src": "8671:130:10"
                      },
                      {
                        "expression": {
                          "id": 2012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2008,
                              "name": "transferDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1994,
                              "src": "8859:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            },
                            "id": 2010,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "transferStateHash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3598,
                            "src": "8859:33:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2011,
                            "name": "transferStateHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1975,
                            "src": "8895:17:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8859:53:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2013,
                        "nodeType": "ExpressionStatement",
                        "src": "8859:53:10"
                      },
                      {
                        "expression": {
                          "id": 2023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2014,
                              "name": "transferDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1994,
                              "src": "8987:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            },
                            "id": 2016,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "transferDisputeExpiry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3600,
                            "src": "8987:37:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 2020,
                                  "name": "cts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1960,
                                  "src": "9060:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                  }
                                },
                                "id": 2021,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferTimeout",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3582,
                                "src": "9060:19:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "expression": {
                                  "id": 2017,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "9027:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 2018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "9027:15:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "9027:19:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9027:62:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8987:102:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2024,
                        "nodeType": "ExpressionStatement",
                        "src": "8987:102:10"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2026,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "9135:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2027,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "9135:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 2028,
                              "name": "cts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1960,
                              "src": "9159:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              }
                            },
                            {
                              "id": 2029,
                              "name": "transferDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1994,
                              "src": "9176:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              },
                              {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            ],
                            "id": 2025,
                            "name": "TransferDisputed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3630,
                            "src": "9105:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_struct$_CoreTransferState_$3585_memory_ptr_$_t_struct$_TransferDispute_$3603_memory_ptr_$returns$__$",
                              "typeString": "function (address,struct ICMCAdjudicator.CoreTransferState memory,struct ICMCAdjudicator.TransferDispute memory)"
                            }
                          },
                          "id": 2030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9105:96:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2031,
                        "nodeType": "EmitStatement",
                        "src": "9100:101:10"
                      }
                    ]
                  },
                  "functionSelector": "5fd334d9",
                  "id": 2033,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1967,
                      "modifierName": {
                        "id": 1966,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "7949:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7949:12:10"
                    },
                    {
                      "id": 1969,
                      "modifierName": {
                        "id": 1968,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "7962:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7962:12:10"
                    },
                    {
                      "arguments": [
                        {
                          "id": 1971,
                          "name": "cts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1960,
                          "src": "7992:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                          }
                        }
                      ],
                      "id": 1972,
                      "modifierName": {
                        "id": 1970,
                        "name": "validateTransfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1555,
                        "src": "7975:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_struct$_CoreTransferState_$3585_calldata_ptr_$",
                          "typeString": "modifier (struct ICMCAdjudicator.CoreTransferState calldata)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7975:21:10"
                    }
                  ],
                  "name": "disputeTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1965,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7940:8:10"
                  },
                  "parameters": {
                    "id": 1964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1960,
                        "mutability": "mutable",
                        "name": "cts",
                        "nodeType": "VariableDeclaration",
                        "scope": 2033,
                        "src": "7850:30:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 1959,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "7850:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1963,
                        "mutability": "mutable",
                        "name": "merkleProofData",
                        "nodeType": "VariableDeclaration",
                        "scope": 2033,
                        "src": "7890:34:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1961,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7890:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 1962,
                          "nodeType": "ArrayTypeName",
                          "src": "7890:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7840:90:10"
                  },
                  "returnParameters": {
                    "id": 1973,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7997:0:10"
                  },
                  "scope": 2322,
                  "src": "7816:1392:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3702
                  ],
                  "body": {
                    "id": 2196,
                    "nodeType": "Block",
                    "src": "9493:2605:10",
                    "statements": [
                      {
                        "assignments": [
                          2053
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2053,
                            "mutability": "mutable",
                            "name": "transferDispute",
                            "nodeType": "VariableDeclaration",
                            "scope": 2196,
                            "src": "9551:39:10",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                              "typeString": "struct ICMCAdjudicator.TransferDispute"
                            },
                            "typeName": {
                              "id": 2052,
                              "name": "TransferDispute",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3603,
                              "src": "9551:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2058,
                        "initialValue": {
                          "baseExpression": {
                            "id": 2054,
                            "name": "transferDisputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1511,
                            "src": "9605:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TransferDispute_$3603_storage_$",
                              "typeString": "mapping(bytes32 => struct ICMCAdjudicator.TransferDispute storage ref)"
                            }
                          },
                          "id": 2057,
                          "indexExpression": {
                            "expression": {
                              "id": 2055,
                              "name": "cts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2035,
                              "src": "9622:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              }
                            },
                            "id": 2056,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3570,
                            "src": "9622:14:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9605:32:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage",
                            "typeString": "struct ICMCAdjudicator.TransferDispute storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9551:86:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2060,
                                  "name": "transferDispute",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2053,
                                  "src": "9745:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                    "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                                  }
                                },
                                "id": 2061,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferDisputeExpiry",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3600,
                                "src": "9745:37:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2062,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9786:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9745:42:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a205452414e534645525f4e4f545f4449535055544544",
                              "id": 2064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9801:39:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8c6d443100c071264393ecdc9249039602740a565d161f214164680281f42ddc",
                                "typeString": "literal_string \"CMCAdjudicator: TRANSFER_NOT_DISPUTED\""
                              },
                              "value": "CMCAdjudicator: TRANSFER_NOT_DISPUTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8c6d443100c071264393ecdc9249039602740a565d161f214164680281f42ddc",
                                "typeString": "literal_string \"CMCAdjudicator: TRANSFER_NOT_DISPUTED\""
                              }
                            ],
                            "id": 2059,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9724:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9724:126:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2066,
                        "nodeType": "ExpressionStatement",
                        "src": "9724:126:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 2073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 2069,
                                    "name": "cts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2035,
                                    "src": "9971:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                    }
                                  ],
                                  "id": 2068,
                                  "name": "hashTransferState",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2321,
                                  "src": "9953:17:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_CoreTransferState_$3585_calldata_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (struct ICMCAdjudicator.CoreTransferState calldata) pure returns (bytes32)"
                                  }
                                },
                                "id": 2070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9953:22:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 2071,
                                  "name": "transferDispute",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2053,
                                  "src": "9979:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                    "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                                  }
                                },
                                "id": 2072,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferStateHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3598,
                                "src": "9979:33:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "9953:59:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5452414e534645525f48415348",
                              "id": 2074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10026:39:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fef57922a3fb7c7144a1e31e492f350a2aaaeee26851ed0fb3d6383d54cd581a",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_TRANSFER_HASH\""
                              },
                              "value": "CMCAdjudicator: INVALID_TRANSFER_HASH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fef57922a3fb7c7144a1e31e492f350a2aaaeee26851ed0fb3d6383d54cd581a",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_TRANSFER_HASH\""
                              }
                            ],
                            "id": 2067,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9932:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9932:143:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2076,
                        "nodeType": "ExpressionStatement",
                        "src": "9932:143:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "10140:27:10",
                              "subExpression": {
                                "expression": {
                                  "id": 2078,
                                  "name": "transferDispute",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2053,
                                  "src": "10141:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                    "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                                  }
                                },
                                "id": 2079,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isDefunded",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3602,
                                "src": "10141:26:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a205452414e534645525f414c52454144595f444546554e444544",
                              "id": 2081,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10181:43:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3a71488a728c3ae865ab86186e252b4e0cf80252afd58d88ac0d2c1d2a9d6e21",
                                "typeString": "literal_string \"CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED\""
                              },
                              "value": "CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3a71488a728c3ae865ab86186e252b4e0cf80252afd58d88ac0d2c1d2a9d6e21",
                                "typeString": "literal_string \"CMCAdjudicator: TRANSFER_ALREADY_DEFUNDED\""
                              }
                            ],
                            "id": 2077,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "10119:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10119:115:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2083,
                        "nodeType": "ExpressionStatement",
                        "src": "10119:115:10"
                      },
                      {
                        "expression": {
                          "id": 2088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2084,
                              "name": "transferDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2053,
                              "src": "10244:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            },
                            "id": 2086,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "isDefunded",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3602,
                            "src": "10244:26:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 2087,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10273:4:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "10244:33:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2089,
                        "nodeType": "ExpressionStatement",
                        "src": "10244:33:10"
                      },
                      {
                        "assignments": [
                          2091
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2091,
                            "mutability": "mutable",
                            "name": "balance",
                            "nodeType": "VariableDeclaration",
                            "scope": 2196,
                            "src": "10288:22:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                              "typeString": "struct Balance"
                            },
                            "typeName": {
                              "id": 2090,
                              "name": "Balance",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4023,
                              "src": "10288:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                                "typeString": "struct Balance"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2092,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10288:22:10"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2093,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "10325:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 2094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "10325:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 2095,
                              "name": "transferDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2053,
                              "src": "10343:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            },
                            "id": 2096,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferDisputeExpiry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3600,
                            "src": "10343:37:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10325:55:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2178,
                          "nodeType": "Block",
                          "src": "11574:147:10",
                          "statements": [
                            {
                              "expression": {
                                "id": 2176,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2173,
                                  "name": "balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2091,
                                  "src": "11689:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                    "typeString": "struct Balance memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 2174,
                                    "name": "cts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2035,
                                    "src": "11699:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                    }
                                  },
                                  "id": 2175,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3580,
                                  "src": "11699:11:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Balance_$4023_calldata_ptr",
                                    "typeString": "struct Balance calldata"
                                  }
                                },
                                "src": "11689:21:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                  "typeString": "struct Balance memory"
                                }
                              },
                              "id": 2177,
                              "nodeType": "ExpressionStatement",
                              "src": "11689:21:10"
                            }
                          ]
                        },
                        "id": 2179,
                        "nodeType": "IfStatement",
                        "src": "10321:1400:10",
                        "trueBody": {
                          "id": 2172,
                          "nodeType": "Block",
                          "src": "10382:1186:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    "id": 2104,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 2100,
                                          "name": "encodedInitialTransferState",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2037,
                                          "src": "10482:27:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          }
                                        ],
                                        "id": 2099,
                                        "name": "keccak256",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -8,
                                        "src": "10472:9:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                          "typeString": "function (bytes memory) pure returns (bytes32)"
                                        }
                                      },
                                      "id": 2101,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10472:38:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 2102,
                                        "name": "cts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2035,
                                        "src": "10514:3:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                          "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                        }
                                      },
                                      "id": 2103,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "initialStateHash",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3584,
                                      "src": "10514:20:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "src": "10472:62:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5452414e534645525f48415348",
                                    "id": 2105,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10552:39:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_fef57922a3fb7c7144a1e31e492f350a2aaaeee26851ed0fb3d6383d54cd581a",
                                      "typeString": "literal_string \"CMCAdjudicator: INVALID_TRANSFER_HASH\""
                                    },
                                    "value": "CMCAdjudicator: INVALID_TRANSFER_HASH"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_fef57922a3fb7c7144a1e31e492f350a2aaaeee26851ed0fb3d6383d54cd581a",
                                      "typeString": "literal_string \"CMCAdjudicator: INVALID_TRANSFER_HASH\""
                                    }
                                  ],
                                  "id": 2098,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "10447:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10447:158:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2107,
                              "nodeType": "ExpressionStatement",
                              "src": "10447:158:10"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 2121,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "id": 2113,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 2109,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -15,
                                          "src": "10780:3:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 2110,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "10780:10:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "expression": {
                                          "id": 2111,
                                          "name": "cts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2035,
                                          "src": "10794:3:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                            "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                          }
                                        },
                                        "id": 2112,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "responder",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3576,
                                        "src": "10794:13:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "10780:27:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "id": 2117,
                                          "name": "responderSignature",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2041,
                                          "src": "10847:18:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          }
                                        },
                                        {
                                          "expression": {
                                            "id": 2118,
                                            "name": "cts",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2035,
                                            "src": "10867:3:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                              "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                            }
                                          },
                                          "id": 2119,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "responder",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3576,
                                          "src": "10867:13:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "expression": {
                                            "id": 2114,
                                            "name": "cts",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2035,
                                            "src": "10811:3:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                              "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                            }
                                          },
                                          "id": 2115,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "initialStateHash",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3584,
                                          "src": "10811:20:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "id": 2116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "checkSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4187,
                                        "src": "10811:35:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                          "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                        }
                                      },
                                      "id": 2120,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10811:70:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "10780:101:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f5245534f4c564552",
                                    "id": 2122,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10899:34:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_effc1fdc58c90991bae76f31c7692637a844d4bc6c4cdeafd40a10da6f159f1d",
                                      "typeString": "literal_string \"CMCAdjudicator: INVALID_RESOLVER\""
                                    },
                                    "value": "CMCAdjudicator: INVALID_RESOLVER"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_effc1fdc58c90991bae76f31c7692637a844d4bc6c4cdeafd40a10da6f159f1d",
                                      "typeString": "literal_string \"CMCAdjudicator: INVALID_RESOLVER\""
                                    }
                                  ],
                                  "id": 2108,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "10755:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2123,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10755:192:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2124,
                              "nodeType": "ExpressionStatement",
                              "src": "10755:192:10"
                            },
                            {
                              "assignments": [
                                2126
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2126,
                                  "mutability": "mutable",
                                  "name": "transferDefinition",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2172,
                                  "src": "10974:38:10",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ITransferDefinition_$3953",
                                    "typeString": "contract ITransferDefinition"
                                  },
                                  "typeName": {
                                    "id": 2125,
                                    "name": "ITransferDefinition",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3953,
                                    "src": "10974:19:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITransferDefinition_$3953",
                                      "typeString": "contract ITransferDefinition"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2131,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 2128,
                                      "name": "cts",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2035,
                                      "src": "11051:3:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                        "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                      }
                                    },
                                    "id": 2129,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transferDefinition",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3572,
                                    "src": "11051:22:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2127,
                                  "name": "ITransferDefinition",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3953,
                                  "src": "11031:19:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ITransferDefinition_$3953_$",
                                    "typeString": "type(contract ITransferDefinition)"
                                  }
                                },
                                "id": 2130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11031:43:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ITransferDefinition_$3953",
                                  "typeString": "contract ITransferDefinition"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10974:100:10"
                            },
                            {
                              "expression": {
                                "id": 2143,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2132,
                                  "name": "balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2091,
                                  "src": "11088:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                    "typeString": "struct Balance memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 2137,
                                            "name": "cts",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2035,
                                            "src": "11153:3:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                              "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                            }
                                          },
                                          "id": 2138,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "balance",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3580,
                                          "src": "11153:11:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Balance_$4023_calldata_ptr",
                                            "typeString": "struct Balance calldata"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_struct$_Balance_$4023_calldata_ptr",
                                            "typeString": "struct Balance calldata"
                                          }
                                        ],
                                        "expression": {
                                          "id": 2135,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "11142:3:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 2136,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encode",
                                        "nodeType": "MemberAccess",
                                        "src": "11142:10:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 2139,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11142:23:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "id": 2140,
                                      "name": "encodedInitialTransferState",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2037,
                                      "src": "11183:27:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    {
                                      "id": 2141,
                                      "name": "encodedTransferResolver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2039,
                                      "src": "11228:23:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2133,
                                      "name": "transferDefinition",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2126,
                                      "src": "11098:18:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ITransferDefinition_$3953",
                                        "typeString": "contract ITransferDefinition"
                                      }
                                    },
                                    "id": 2134,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "resolve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3927,
                                    "src": "11098:26:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_Balance_$4023_memory_ptr_$",
                                      "typeString": "function (bytes memory,bytes memory,bytes memory) view external returns (struct Balance memory)"
                                    }
                                  },
                                  "id": 2142,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11098:167:10",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                    "typeString": "struct Balance memory"
                                  }
                                },
                                "src": "11088:177:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                  "typeString": "struct Balance memory"
                                }
                              },
                              "id": 2144,
                              "nodeType": "ExpressionStatement",
                              "src": "11088:177:10"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "baseExpression": {
                                            "expression": {
                                              "id": 2151,
                                              "name": "balance",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2091,
                                              "src": "11401:7:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                                "typeString": "struct Balance memory"
                                              }
                                            },
                                            "id": 2152,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "amount",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4018,
                                            "src": "11401:14:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                              "typeString": "uint256[2] memory"
                                            }
                                          },
                                          "id": 2154,
                                          "indexExpression": {
                                            "hexValue": "31",
                                            "id": 2153,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11416:1:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "11401:17:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "baseExpression": {
                                            "expression": {
                                              "id": 2146,
                                              "name": "balance",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2091,
                                              "src": "11379:7:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                                "typeString": "struct Balance memory"
                                              }
                                            },
                                            "id": 2147,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "amount",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4018,
                                            "src": "11379:14:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                              "typeString": "uint256[2] memory"
                                            }
                                          },
                                          "id": 2149,
                                          "indexExpression": {
                                            "hexValue": "30",
                                            "id": 2148,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11394:1:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "11379:17:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2150,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "add",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 402,
                                        "src": "11379:21:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2155,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11379:40:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "baseExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 2162,
                                                "name": "cts",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2035,
                                                "src": "11469:3:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                                  "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                                }
                                              },
                                              "id": 2163,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "balance",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3580,
                                              "src": "11469:11:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Balance_$4023_calldata_ptr",
                                                "typeString": "struct Balance calldata"
                                              }
                                            },
                                            "id": 2164,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "amount",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4018,
                                            "src": "11469:18:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$2_calldata_ptr",
                                              "typeString": "uint256[2] calldata"
                                            }
                                          },
                                          "id": 2166,
                                          "indexExpression": {
                                            "hexValue": "31",
                                            "id": 2165,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11488:1:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "11469:21:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "baseExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 2156,
                                                "name": "cts",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2035,
                                                "src": "11443:3:10",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                                  "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                                }
                                              },
                                              "id": 2157,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "balance",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3580,
                                              "src": "11443:11:10",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Balance_$4023_calldata_ptr",
                                                "typeString": "struct Balance calldata"
                                              }
                                            },
                                            "id": 2158,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "amount",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4018,
                                            "src": "11443:18:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$2_calldata_ptr",
                                              "typeString": "uint256[2] calldata"
                                            }
                                          },
                                          "id": 2160,
                                          "indexExpression": {
                                            "hexValue": "30",
                                            "id": 2159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11462:1:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "11443:21:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2161,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "add",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 402,
                                        "src": "11443:25:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2167,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11443:48:10",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11379:112:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f42414c414e434553",
                                    "id": 2169,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11509:34:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_f529474f6cdbbdcb7094f12f538a90d707241bd58570979c3c9d65ad63bc55cf",
                                      "typeString": "literal_string \"CMCAdjudicator: INVALID_BALANCES\""
                                    },
                                    "value": "CMCAdjudicator: INVALID_BALANCES"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_f529474f6cdbbdcb7094f12f538a90d707241bd58570979c3c9d65ad63bc55cf",
                                      "typeString": "literal_string \"CMCAdjudicator: INVALID_BALANCES\""
                                    }
                                  ],
                                  "id": 2145,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "11354:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2170,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11354:203:10",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2171,
                              "nodeType": "ExpressionStatement",
                              "src": "11354:203:10"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2181,
                                "name": "cts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2035,
                                "src": "11837:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                  "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                }
                              },
                              "id": 2182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "assetId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3578,
                              "src": "11837:11:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2183,
                              "name": "balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2091,
                              "src": "11850:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                "typeString": "struct Balance memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                "typeString": "struct Balance memory"
                              }
                            ],
                            "id": 2180,
                            "name": "makeBalanceExitable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2451,
                            "src": "11817:19:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Balance_$4023_memory_ptr_$returns$__$",
                              "typeString": "function (address,struct Balance memory)"
                            }
                          },
                          "id": 2184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11817:41:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2185,
                        "nodeType": "ExpressionStatement",
                        "src": "11817:41:10"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2187,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "11926:3:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2188,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "11926:10:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 2189,
                              "name": "cts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2035,
                              "src": "11950:3:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              }
                            },
                            {
                              "id": 2190,
                              "name": "transferDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2053,
                              "src": "11967:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              }
                            },
                            {
                              "id": 2191,
                              "name": "encodedInitialTransferState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2037,
                              "src": "11996:27:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 2192,
                              "name": "encodedTransferResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2039,
                              "src": "12037:23:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 2193,
                              "name": "balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2091,
                              "src": "12074:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                "typeString": "struct Balance memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                              },
                              {
                                "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                                "typeString": "struct ICMCAdjudicator.TransferDispute storage pointer"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                "typeString": "struct Balance memory"
                              }
                            ],
                            "id": 2186,
                            "name": "TransferDefunded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3644,
                            "src": "11896:16:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_struct$_CoreTransferState_$3585_memory_ptr_$_t_struct$_TransferDispute_$3603_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_Balance_$4023_memory_ptr_$returns$__$",
                              "typeString": "function (address,struct ICMCAdjudicator.CoreTransferState memory,struct ICMCAdjudicator.TransferDispute memory,bytes memory,bytes memory,struct Balance memory)"
                            }
                          },
                          "id": 2194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11896:195:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2195,
                        "nodeType": "EmitStatement",
                        "src": "11891:200:10"
                      }
                    ]
                  },
                  "functionSelector": "072f25fd",
                  "id": 2197,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2045,
                      "modifierName": {
                        "id": 2044,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "9445:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9445:12:10"
                    },
                    {
                      "id": 2047,
                      "modifierName": {
                        "id": 2046,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "9458:12:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9458:12:10"
                    },
                    {
                      "arguments": [
                        {
                          "id": 2049,
                          "name": "cts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2035,
                          "src": "9488:3:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                          }
                        }
                      ],
                      "id": 2050,
                      "modifierName": {
                        "id": 2048,
                        "name": "validateTransfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1555,
                        "src": "9471:16:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_struct$_CoreTransferState_$3585_calldata_ptr_$",
                          "typeString": "modifier (struct ICMCAdjudicator.CoreTransferState calldata)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9471:21:10"
                    }
                  ],
                  "name": "defundTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2043,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "9436:8:10"
                  },
                  "parameters": {
                    "id": 2042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2035,
                        "mutability": "mutable",
                        "name": "cts",
                        "nodeType": "VariableDeclaration",
                        "scope": 2197,
                        "src": "9247:30:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 2034,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "9247:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2037,
                        "mutability": "mutable",
                        "name": "encodedInitialTransferState",
                        "nodeType": "VariableDeclaration",
                        "scope": 2197,
                        "src": "9287:42:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2036,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "9287:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2039,
                        "mutability": "mutable",
                        "name": "encodedTransferResolver",
                        "nodeType": "VariableDeclaration",
                        "scope": 2197,
                        "src": "9339:38:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2038,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "9339:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2041,
                        "mutability": "mutable",
                        "name": "responderSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 2197,
                        "src": "9387:33:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2040,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "9387:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9237:189:10"
                  },
                  "returnParameters": {
                    "id": 2051,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9493:0:10"
                  },
                  "scope": 2322,
                  "src": "9214:2884:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2239,
                    "nodeType": "Block",
                    "src": "12308:387:10",
                    "statements": [
                      {
                        "assignments": [
                          2209
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2209,
                            "mutability": "mutable",
                            "name": "commitment",
                            "nodeType": "VariableDeclaration",
                            "scope": 2239,
                            "src": "12318:18:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 2208,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "12318:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2218,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 2213,
                                    "name": "CommitmentType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3534,
                                    "src": "12372:14:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_CommitmentType_$3534_$",
                                      "typeString": "type(enum CommitmentType)"
                                    }
                                  },
                                  "id": 2214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "ChannelState",
                                  "nodeType": "MemberAccess",
                                  "src": "12372:27:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_CommitmentType_$3534",
                                    "typeString": "enum CommitmentType"
                                  }
                                },
                                {
                                  "id": 2215,
                                  "name": "ccsHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2201,
                                  "src": "12401:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_CommitmentType_$3534",
                                    "typeString": "enum CommitmentType"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 2211,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "12361:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 2212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "12361:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 2216,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12361:48:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2210,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "12351:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 2217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12351:59:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12318:92:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2222,
                                  "name": "aliceSignature",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2203,
                                  "src": "12467:14:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2223,
                                    "name": "ccs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2199,
                                    "src": "12483:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                    }
                                  },
                                  "id": 2224,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "alice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3542,
                                  "src": "12483:9:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 2220,
                                  "name": "commitment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2209,
                                  "src": "12441:10:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 2221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "checkSignature",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4187,
                                "src": "12441:25:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                }
                              },
                              "id": 2225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12441:52:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f414c4943455f534947",
                              "id": 2226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12507:35:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e506e5185d84e4177e3a847f03912aac5dad1fb1d74cd3d9d0fd715b215f7eaa",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_ALICE_SIG\""
                              },
                              "value": "CMCAdjudicator: INVALID_ALICE_SIG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e506e5185d84e4177e3a847f03912aac5dad1fb1d74cd3d9d0fd715b215f7eaa",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_ALICE_SIG\""
                              }
                            ],
                            "id": 2219,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12420:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12420:132:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2228,
                        "nodeType": "ExpressionStatement",
                        "src": "12420:132:10"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2232,
                                  "name": "bobSignature",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2205,
                                  "src": "12609:12:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2233,
                                    "name": "ccs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2199,
                                    "src": "12623:3:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                      "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                    }
                                  },
                                  "id": 2234,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "bob",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3544,
                                  "src": "12623:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 2230,
                                  "name": "commitment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2209,
                                  "src": "12583:10:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 2231,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "checkSignature",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4187,
                                "src": "12583:25:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                }
                              },
                              "id": 2235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12583:48:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f424f425f534947",
                              "id": 2236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12645:33:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2f85242fc652350c1e8cbb8803dee03a4f0f10fe0662f7f35a3126126b0390e0",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_BOB_SIG\""
                              },
                              "value": "CMCAdjudicator: INVALID_BOB_SIG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2f85242fc652350c1e8cbb8803dee03a4f0f10fe0662f7f35a3126126b0390e0",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_BOB_SIG\""
                              }
                            ],
                            "id": 2229,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12562:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12562:126:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2238,
                        "nodeType": "ExpressionStatement",
                        "src": "12562:126:10"
                      }
                    ]
                  },
                  "id": 2240,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifySignaturesOnChannelStateHash",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2199,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "12157:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 2198,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "12157:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2201,
                        "mutability": "mutable",
                        "name": "ccsHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "12196:15:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2200,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "12196:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2203,
                        "mutability": "mutable",
                        "name": "aliceSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "12221:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2202,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "12221:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2205,
                        "mutability": "mutable",
                        "name": "bobSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "12260:27:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2204,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "12260:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12147:146:10"
                  },
                  "returnParameters": {
                    "id": 2207,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12308:0:10"
                  },
                  "scope": 2322,
                  "src": "12104:591:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2260,
                    "nodeType": "Block",
                    "src": "12826:137:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2253,
                                  "name": "proof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2243,
                                  "src": "12876:5:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                    "typeString": "bytes32[] calldata"
                                  }
                                },
                                {
                                  "id": 2254,
                                  "name": "root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2245,
                                  "src": "12883:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 2255,
                                  "name": "leaf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2247,
                                  "src": "12889:4:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                    "typeString": "bytes32[] calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 2251,
                                  "name": "MerkleProof",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 300,
                                  "src": "12857:11:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_MerkleProof_$300_$",
                                    "typeString": "type(library MerkleProof)"
                                  }
                                },
                                "id": 2252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "verify",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 299,
                                "src": "12857:18:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                                }
                              },
                              "id": 2256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12857:37:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341646a7564696361746f723a20494e56414c49445f4d45524b4c455f50524f4f46",
                              "id": 2257,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12908:38:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9effe7940606c9f61a4894f19e3b59706597b25354e49976cf43cfa174cd13f4",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_MERKLE_PROOF\""
                              },
                              "value": "CMCAdjudicator: INVALID_MERKLE_PROOF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9effe7940606c9f61a4894f19e3b59706597b25354e49976cf43cfa174cd13f4",
                                "typeString": "literal_string \"CMCAdjudicator: INVALID_MERKLE_PROOF\""
                              }
                            ],
                            "id": 2250,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12836:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12836:120:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2259,
                        "nodeType": "ExpressionStatement",
                        "src": "12836:120:10"
                      }
                    ]
                  },
                  "id": 2261,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyMerkleProof",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2243,
                        "mutability": "mutable",
                        "name": "proof",
                        "nodeType": "VariableDeclaration",
                        "scope": 2261,
                        "src": "12737:24:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2241,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "12737:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 2242,
                          "nodeType": "ArrayTypeName",
                          "src": "12737:9:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2245,
                        "mutability": "mutable",
                        "name": "root",
                        "nodeType": "VariableDeclaration",
                        "scope": 2261,
                        "src": "12771:12:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2244,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "12771:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2247,
                        "mutability": "mutable",
                        "name": "leaf",
                        "nodeType": "VariableDeclaration",
                        "scope": 2261,
                        "src": "12793:12:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2246,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "12793:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12727:84:10"
                  },
                  "returnParameters": {
                    "id": 2249,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12826:0:10"
                  },
                  "scope": 2322,
                  "src": "12701:262:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2272,
                    "nodeType": "Block",
                    "src": "13026:72:10",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2266,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "13043:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 2267,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "13043:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 2268,
                              "name": "channelDispute",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "13061:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                              }
                            },
                            "id": 2269,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "consensusExpiry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3593,
                            "src": "13061:30:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13043:48:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2265,
                        "id": 2271,
                        "nodeType": "Return",
                        "src": "13036:55:10"
                      }
                    ]
                  },
                  "id": 2273,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "inConsensusPhase",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2262,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12994:2:10"
                  },
                  "returnParameters": {
                    "id": 2265,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2264,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2273,
                        "src": "13020:4:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2263,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "13020:4:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13019:6:10"
                  },
                  "scope": 2322,
                  "src": "12969:129:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2290,
                    "nodeType": "Block",
                    "src": "13158:146:10",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2278,
                                "name": "channelDispute",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1503,
                                "src": "13187:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                  "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                }
                              },
                              "id": 2279,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "consensusExpiry",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3593,
                              "src": "13187:30:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "expression": {
                                "id": 2280,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "13221:5:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 2281,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "13221:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13187:49:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2283,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "13252:5:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 2284,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "13252:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "expression": {
                                "id": 2285,
                                "name": "channelDispute",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1503,
                                "src": "13270:14:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage",
                                  "typeString": "struct ICMCAdjudicator.ChannelDispute storage ref"
                                }
                              },
                              "id": 2286,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "defundExpiry",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3595,
                              "src": "13270:27:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13252:45:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "13187:110:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2277,
                        "id": 2289,
                        "nodeType": "Return",
                        "src": "13168:129:10"
                      }
                    ]
                  },
                  "id": 2291,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "inDefundPhase",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13126:2:10"
                  },
                  "returnParameters": {
                    "id": 2277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2276,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2291,
                        "src": "13152:4:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2275,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "13152:4:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13151:6:10"
                  },
                  "scope": 2322,
                  "src": "13104:200:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2305,
                    "nodeType": "Block",
                    "src": "13427:50:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2301,
                                  "name": "ccs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2293,
                                  "src": "13465:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreChannelState calldata"
                                  }
                                ],
                                "expression": {
                                  "id": 2299,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "13454:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 2300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "13454:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 2302,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13454:15:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2298,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "13444:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 2303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13444:26:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 2297,
                        "id": 2304,
                        "nodeType": "Return",
                        "src": "13437:33:10"
                      }
                    ]
                  },
                  "id": 2306,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hashChannelState",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2293,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 2306,
                        "src": "13336:29:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 2292,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "13336:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13335:31:10"
                  },
                  "returnParameters": {
                    "id": 2297,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2296,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2306,
                        "src": "13414:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2295,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "13414:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13413:9:10"
                  },
                  "scope": 2322,
                  "src": "13310:167:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2320,
                    "nodeType": "Block",
                    "src": "13602:50:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2316,
                                  "name": "cts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2308,
                                  "src": "13640:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                                    "typeString": "struct ICMCAdjudicator.CoreTransferState calldata"
                                  }
                                ],
                                "expression": {
                                  "id": 2314,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "13629:3:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 2315,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "13629:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 2317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13629:15:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2313,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "13619:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 2318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13619:26:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 2312,
                        "id": 2319,
                        "nodeType": "Return",
                        "src": "13612:33:10"
                      }
                    ]
                  },
                  "id": 2321,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hashTransferState",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2308,
                        "mutability": "mutable",
                        "name": "cts",
                        "nodeType": "VariableDeclaration",
                        "scope": 2321,
                        "src": "13510:30:10",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 2307,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "13510:17:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13509:32:10"
                  },
                  "returnParameters": {
                    "id": 2312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2311,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2321,
                        "src": "13589:7:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2310,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "13589:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13588:9:10"
                  },
                  "scope": 2322,
                  "src": "13483:169:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2323,
              "src": "864:12790:10"
            }
          ],
          "src": "39:13616:10"
        },
        "id": 10
      },
      "src.sol/CMCAsset.sol": {
        "ast": {
          "absolutePath": "src.sol/CMCAsset.sol",
          "exportedSymbols": {
            "CMCAsset": [
              2583
            ]
          },
          "id": 2584,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2324,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:11"
            },
            {
              "id": 2325,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:11"
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCAsset.sol",
              "file": "./interfaces/ICMCAsset.sol",
              "id": 2326,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 3733,
              "src": "98:36:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/Types.sol",
              "file": "./interfaces/Types.sol",
              "id": 2327,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 4024,
              "src": "135:32:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCCore.sol",
              "file": "./CMCCore.sol",
              "id": 2328,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 2714,
              "src": "168:23:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibAsset.sol",
              "file": "./lib/LibAsset.sol",
              "id": 2329,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 4164,
              "src": "192:28:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibMath.sol",
              "file": "./lib/LibMath.sol",
              "id": 2330,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 4769,
              "src": "221:27:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/Math.sol",
              "file": "@openzeppelin/contracts/math/Math.sol",
              "id": 2331,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 374,
              "src": "249:47:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
              "file": "@openzeppelin/contracts/math/SafeMath.sol",
              "id": 2332,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 570,
              "src": "297:51:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 2333,
              "nodeType": "ImportDirective",
              "scope": 2584,
              "sourceUnit": 1155,
              "src": "349:56:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2335,
                    "name": "CMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2713,
                    "src": "879:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                      "typeString": "contract CMCCore"
                    }
                  },
                  "id": 2336,
                  "nodeType": "InheritanceSpecifier",
                  "src": "879:7:11"
                },
                {
                  "baseName": {
                    "id": 2337,
                    "name": "ICMCAsset",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3732,
                    "src": "888:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCAsset_$3732",
                      "typeString": "contract ICMCAsset"
                    }
                  },
                  "id": 2338,
                  "nodeType": "InheritanceSpecifier",
                  "src": "888:9:11"
                }
              ],
              "contractDependencies": [
                2713,
                3442,
                3732,
                3753
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2334,
                "nodeType": "StructuredDocumentation",
                "src": "407:450:11",
                "text": "@title CMCAsset\n @author Connext <support@connext.network>\n @notice Contains logic to safely transfer channel assets (even if they are\n         noncompliant). During adjudication, balances from defunding the\n         channel or defunding transfers are registered as withdrawable. Once\n         they are registered, the owner (or a watchtower on behalf of the\n         owner), may call `exit` to reclaim funds from the multisig."
              },
              "fullyImplemented": true,
              "id": 2583,
              "linearizedBaseContracts": [
                2583,
                3732,
                2713,
                3753,
                3442
              ],
              "name": "CMCAsset",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 2341,
                  "libraryName": {
                    "id": 2339,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 569,
                    "src": "910:8:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$569",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "904:27:11",
                  "typeName": {
                    "id": 2340,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "923:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 2344,
                  "libraryName": {
                    "id": 2342,
                    "name": "LibMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4768,
                    "src": "942:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibMath_$4768",
                      "typeString": "library LibMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "936:26:11",
                  "typeName": {
                    "id": 2343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "954:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 2348,
                  "mutability": "mutable",
                  "name": "totalTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 2583,
                  "src": "968:53:11",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 2347,
                    "keyType": {
                      "id": 2345,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "976:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "968:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 2346,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "987:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2354,
                  "mutability": "mutable",
                  "name": "exitableAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2583,
                  "src": "1027:78:11",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 2353,
                    "keyType": {
                      "id": 2349,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1035:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1027:47:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 2352,
                      "keyType": {
                        "id": 2350,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1054:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1046:27:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 2351,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1065:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2367,
                    "nodeType": "Block",
                    "src": "1180:52:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 2365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2361,
                              "name": "totalTransferred",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2348,
                              "src": "1190:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2363,
                            "indexExpression": {
                              "id": 2362,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2356,
                              "src": "1207:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1190:25:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 2364,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2358,
                            "src": "1219:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1190:35:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2366,
                        "nodeType": "ExpressionStatement",
                        "src": "1190:35:11"
                      }
                    ]
                  },
                  "id": 2368,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "registerTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2359,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2356,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2368,
                        "src": "1138:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1138:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2358,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 2368,
                        "src": "1155:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2357,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1155:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1137:33:11"
                  },
                  "returnParameters": {
                    "id": 2360,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1180:0:11"
                  },
                  "scope": 2583,
                  "src": "1112:120:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3713
                  ],
                  "body": {
                    "id": 2384,
                    "nodeType": "Block",
                    "src": "1407:49:11",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 2380,
                            "name": "totalTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2348,
                            "src": "1424:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2382,
                          "indexExpression": {
                            "id": 2381,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2370,
                            "src": "1441:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1424:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2379,
                        "id": 2383,
                        "nodeType": "Return",
                        "src": "1417:32:11"
                      }
                    ]
                  },
                  "functionSelector": "cefa5122",
                  "id": 2385,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2374,
                      "modifierName": {
                        "id": 2373,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1339:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1339:12:11"
                    },
                    {
                      "id": 2376,
                      "modifierName": {
                        "id": 2375,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "1360:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1360:16:11"
                    }
                  ],
                  "name": "getTotalTransferred",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2372,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1322:8:11"
                  },
                  "parameters": {
                    "id": 2371,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2370,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2385,
                        "src": "1267:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2369,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1267:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1266:17:11"
                  },
                  "returnParameters": {
                    "id": 2379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2378,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2385,
                        "src": "1394:7:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2377,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1394:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1393:9:11"
                  },
                  "scope": 2583,
                  "src": "1238:218:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2409,
                    "nodeType": "Block",
                    "src": "1575:125:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 2407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 2394,
                                "name": "exitableAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2354,
                                "src": "1585:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 2397,
                              "indexExpression": {
                                "id": 2395,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2387,
                                "src": "1600:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1585:23:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2398,
                            "indexExpression": {
                              "id": 2396,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2389,
                              "src": "1622:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1585:56:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2405,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2391,
                                "src": "1686:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 2399,
                                    "name": "exitableAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2354,
                                    "src": "1644:14:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 2401,
                                  "indexExpression": {
                                    "id": 2400,
                                    "name": "assetId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2387,
                                    "src": "1659:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1644:23:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 2403,
                                "indexExpression": {
                                  "id": 2402,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2389,
                                  "src": "1668:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1644:34:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2404,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "satAdd",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4767,
                              "src": "1644:41:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1644:49:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1585:108:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2408,
                        "nodeType": "ExpressionStatement",
                        "src": "1585:108:11"
                      }
                    ]
                  },
                  "id": 2410,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makeExitable",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2392,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2387,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2410,
                        "src": "1493:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2386,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1493:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2389,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2410,
                        "src": "1518:17:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2388,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1518:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2391,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 2410,
                        "src": "1545:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2390,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1545:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1483:82:11"
                  },
                  "returnParameters": {
                    "id": 2393,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1575:0:11"
                  },
                  "scope": 2583,
                  "src": "1462:238:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2450,
                    "nodeType": "Block",
                    "src": "1807:213:11",
                    "statements": [
                      {
                        "body": {
                          "id": 2448,
                          "nodeType": "Block",
                          "src": "1849:165:11",
                          "statements": [
                            {
                              "assignments": [
                                2428
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2428,
                                  "mutability": "mutable",
                                  "name": "amount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2448,
                                  "src": "1863:14:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2427,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1863:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2433,
                              "initialValue": {
                                "baseExpression": {
                                  "expression": {
                                    "id": 2429,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2414,
                                    "src": "1880:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  },
                                  "id": 2430,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4018,
                                  "src": "1880:14:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                    "typeString": "uint256[2] memory"
                                  }
                                },
                                "id": 2432,
                                "indexExpression": {
                                  "id": 2431,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2418,
                                  "src": "1895:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1880:17:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1863:34:11"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2436,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2434,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2428,
                                  "src": "1915:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2435,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1924:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1915:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2447,
                              "nodeType": "IfStatement",
                              "src": "1911:93:11",
                              "trueBody": {
                                "id": 2446,
                                "nodeType": "Block",
                                "src": "1927:77:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 2438,
                                          "name": "assetId",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2412,
                                          "src": "1958:7:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "baseExpression": {
                                            "expression": {
                                              "id": 2439,
                                              "name": "balance",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2414,
                                              "src": "1967:7:11",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                                "typeString": "struct Balance memory"
                                              }
                                            },
                                            "id": 2440,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "to",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4022,
                                            "src": "1967:10:11",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_payable_$2_memory_ptr",
                                              "typeString": "address payable[2] memory"
                                            }
                                          },
                                          "id": 2442,
                                          "indexExpression": {
                                            "id": 2441,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2418,
                                            "src": "1978:1:11",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "1967:13:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          }
                                        },
                                        {
                                          "id": 2443,
                                          "name": "amount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2428,
                                          "src": "1982:6:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 2437,
                                        "name": "makeExitable",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2410,
                                        "src": "1945:12:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                          "typeString": "function (address,address,uint256)"
                                        }
                                      },
                                      "id": 2444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1945:44:11",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 2445,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1945:44:11"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2421,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2418,
                            "src": "1837:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 2422,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1841:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "1837:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2449,
                        "initializationExpression": {
                          "assignments": [
                            2418
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 2418,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 2449,
                              "src": "1822:9:11",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 2417,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1822:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 2420,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 2419,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1834:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1822:13:11"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 2425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "1844:3:11",
                            "subExpression": {
                              "id": 2424,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2418,
                              "src": "1844:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2426,
                          "nodeType": "ExpressionStatement",
                          "src": "1844:3:11"
                        },
                        "nodeType": "ForStatement",
                        "src": "1817:197:11"
                      }
                    ]
                  },
                  "id": 2451,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makeBalanceExitable",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2415,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2412,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2451,
                        "src": "1744:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2411,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1744:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2414,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "scope": 2451,
                        "src": "1769:22:11",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 2413,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "1769:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1734:63:11"
                  },
                  "returnParameters": {
                    "id": 2416,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1807:0:11"
                  },
                  "scope": 2583,
                  "src": "1706:314:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3722
                  ],
                  "body": {
                    "id": 2471,
                    "nodeType": "Block",
                    "src": "2208:54:11",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 2465,
                              "name": "exitableAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2354,
                              "src": "2225:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 2467,
                            "indexExpression": {
                              "id": 2466,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2453,
                              "src": "2240:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2225:23:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2469,
                          "indexExpression": {
                            "id": 2468,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2455,
                            "src": "2249:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2225:30:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2464,
                        "id": 2470,
                        "nodeType": "Return",
                        "src": "2218:37:11"
                      }
                    ]
                  },
                  "functionSelector": "e9852569",
                  "id": 2472,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2459,
                      "modifierName": {
                        "id": 2458,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "2140:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2140:12:11"
                    },
                    {
                      "id": 2461,
                      "modifierName": {
                        "id": 2460,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "2161:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2161:16:11"
                    }
                  ],
                  "name": "getExitableAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2457,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2123:8:11"
                  },
                  "parameters": {
                    "id": 2456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2453,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2472,
                        "src": "2053:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2452,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2053:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2455,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 2472,
                        "src": "2070:13:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2454,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2070:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2052:32:11"
                  },
                  "returnParameters": {
                    "id": 2464,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2463,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2472,
                        "src": "2195:7:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2462,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2195:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2194:9:11"
                  },
                  "scope": 2583,
                  "src": "2026:236:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2490,
                    "nodeType": "Block",
                    "src": "2392:331:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2483,
                              "name": "maxAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2476,
                              "src": "2673:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 2486,
                                  "name": "assetId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2474,
                                  "src": "2707:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 2484,
                                  "name": "LibAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4163,
                                  "src": "2684:8:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_LibAsset_$4163_$",
                                    "typeString": "type(library LibAsset)"
                                  }
                                },
                                "id": 2485,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getOwnBalance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4087,
                                "src": "2684:22:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 2487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2684:31:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2481,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 373,
                              "src": "2664:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$373_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 2482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "min",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 339,
                            "src": "2664:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2664:52:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2480,
                        "id": 2489,
                        "nodeType": "Return",
                        "src": "2657:59:11"
                      }
                    ]
                  },
                  "id": 2491,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAvailableAmount",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2477,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2474,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2491,
                        "src": "2296:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2473,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2296:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2476,
                        "mutability": "mutable",
                        "name": "maxAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 2491,
                        "src": "2313:17:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2475,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2313:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2295:36:11"
                  },
                  "returnParameters": {
                    "id": 2480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2479,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2491,
                        "src": "2379:7:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2478,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2379:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2378:9:11"
                  },
                  "scope": 2583,
                  "src": "2268:455:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2515,
                    "nodeType": "Block",
                    "src": "2851:189:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2501,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2493,
                              "src": "2878:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2502,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2497,
                              "src": "2887:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2500,
                            "name": "registerTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2368,
                            "src": "2861:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2861:33:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2504,
                        "nodeType": "ExpressionStatement",
                        "src": "2861:33:11"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2508,
                                  "name": "assetId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2493,
                                  "src": "2955:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 2509,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2495,
                                  "src": "2964:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "id": 2510,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2497,
                                  "src": "2975:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 2506,
                                  "name": "LibAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4163,
                                  "src": "2925:8:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_LibAsset_$4163_$",
                                    "typeString": "type(library LibAsset)"
                                  }
                                },
                                "id": 2507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "unregisteredTransfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4162,
                                "src": "2925:29:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address payable,uint256) returns (bool)"
                                }
                              },
                              "id": 2511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2925:57:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341737365743a205452414e534645525f4641494c4544",
                              "id": 2512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2996:27:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_298eb4f36094b7c92f659d805e102777071e0bb963d61af0c6f11971e479e65d",
                                "typeString": "literal_string \"CMCAsset: TRANSFER_FAILED\""
                              },
                              "value": "CMCAsset: TRANSFER_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_298eb4f36094b7c92f659d805e102777071e0bb963d61af0c6f11971e479e65d",
                                "typeString": "literal_string \"CMCAsset: TRANSFER_FAILED\""
                              }
                            ],
                            "id": 2505,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2904:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2904:129:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2514,
                        "nodeType": "ExpressionStatement",
                        "src": "2904:129:11"
                      }
                    ]
                  },
                  "id": 2516,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferAsset",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2493,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2516,
                        "src": "2761:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2492,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2761:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2495,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2516,
                        "src": "2786:25:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 2494,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2786:15:11",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2497,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 2516,
                        "src": "2821:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2496,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2821:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2751:90:11"
                  },
                  "returnParameters": {
                    "id": 2499,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2851:0:11"
                  },
                  "scope": 2583,
                  "src": "2729:311:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3731
                  ],
                  "body": {
                    "id": 2581,
                    "nodeType": "Block",
                    "src": "3193:763:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2538,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 2534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 2531,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "3373:3:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 2532,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3373:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 2533,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2520,
                                  "src": "3387:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "3373:19:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 2537,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2535,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2520,
                                  "src": "3396:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 2536,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2522,
                                  "src": "3405:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "3396:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3373:41:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341737365743a204f574e45525f4d49534d41544348",
                              "id": 2539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3428:26:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bcbac55c289a088abc6ad03cca8b363cbeeab5e7231c8ec727dbadc7e0156ea6",
                                "typeString": "literal_string \"CMCAsset: OWNER_MISMATCH\""
                              },
                              "value": "CMCAsset: OWNER_MISMATCH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_bcbac55c289a088abc6ad03cca8b363cbeeab5e7231c8ec727dbadc7e0156ea6",
                                "typeString": "literal_string \"CMCAsset: OWNER_MISMATCH\""
                              }
                            ],
                            "id": 2530,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3352:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3352:112:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2541,
                        "nodeType": "ExpressionStatement",
                        "src": "3352:112:11"
                      },
                      {
                        "assignments": [
                          2543
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2543,
                            "mutability": "mutable",
                            "name": "amount",
                            "nodeType": "VariableDeclaration",
                            "scope": 2581,
                            "src": "3475:14:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2542,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3475:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2552,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2545,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2518,
                              "src": "3540:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 2546,
                                  "name": "exitableAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2354,
                                  "src": "3565:14:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 2548,
                                "indexExpression": {
                                  "id": 2547,
                                  "name": "assetId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2518,
                                  "src": "3580:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3565:23:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2550,
                              "indexExpression": {
                                "id": 2549,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2520,
                                "src": "3589:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3565:30:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2544,
                            "name": "getAvailableAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2491,
                            "src": "3504:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 2551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3504:105:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3475:134:11"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2554,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2543,
                                "src": "3661:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2555,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3670:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "3661:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4341737365743a204e4f5f4f50",
                              "id": 2557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3673:17:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a5e57f938eab4beb8d6a4e2049b3dfc47ad2a03dff3e6149eea06c0b37c66909",
                                "typeString": "literal_string \"CMCAsset: NO_OP\""
                              },
                              "value": "CMCAsset: NO_OP"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a5e57f938eab4beb8d6a4e2049b3dfc47ad2a03dff3e6149eea06c0b37c66909",
                                "typeString": "literal_string \"CMCAsset: NO_OP\""
                              }
                            ],
                            "id": 2553,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3653:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3653:38:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2559,
                        "nodeType": "ExpressionStatement",
                        "src": "3653:38:11"
                      },
                      {
                        "expression": {
                          "id": 2573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 2560,
                                "name": "exitableAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2354,
                                "src": "3772:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 2563,
                              "indexExpression": {
                                "id": 2561,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2518,
                                "src": "3787:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3772:23:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2564,
                            "indexExpression": {
                              "id": 2562,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2520,
                              "src": "3809:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3772:52:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2571,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2543,
                                "src": "3862:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 2565,
                                    "name": "exitableAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2354,
                                    "src": "3827:14:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 2567,
                                  "indexExpression": {
                                    "id": 2566,
                                    "name": "assetId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2518,
                                    "src": "3842:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3827:23:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 2569,
                                "indexExpression": {
                                  "id": 2568,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2520,
                                  "src": "3851:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3827:30:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 419,
                              "src": "3827:34:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2572,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3827:42:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3772:97:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2574,
                        "nodeType": "ExpressionStatement",
                        "src": "3772:97:11"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2576,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2518,
                              "src": "3922:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2577,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2522,
                              "src": "3931:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 2578,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "3942:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2575,
                            "name": "transferAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2516,
                            "src": "3908:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address payable,uint256)"
                            }
                          },
                          "id": 2579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3908:41:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2580,
                        "nodeType": "ExpressionStatement",
                        "src": "3908:41:11"
                      }
                    ]
                  },
                  "functionSelector": "5bc9d96d",
                  "id": 2582,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2526,
                      "modifierName": {
                        "id": 2525,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "3167:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3167:12:11"
                    },
                    {
                      "id": 2528,
                      "modifierName": {
                        "id": 2527,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "3180:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3180:12:11"
                    }
                  ],
                  "name": "exit",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2524,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3158:8:11"
                  },
                  "parameters": {
                    "id": 2523,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2518,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2582,
                        "src": "3069:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2517,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3069:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2520,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 2582,
                        "src": "3094:13:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2519,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3094:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2522,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2582,
                        "src": "3117:25:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 2521,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3117:15:11",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3059:89:11"
                  },
                  "returnParameters": {
                    "id": 2529,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3193:0:11"
                  },
                  "scope": 2583,
                  "src": "3046:910:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2584,
              "src": "858:3100:11"
            }
          ],
          "src": "39:3920:11"
        },
        "id": 11
      },
      "src.sol/CMCCore.sol": {
        "ast": {
          "absolutePath": "src.sol/CMCCore.sol",
          "exportedSymbols": {
            "CMCCore": [
              2713
            ]
          },
          "id": 2714,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2585,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:12"
            },
            {
              "id": 2586,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:12"
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCCore.sol",
              "file": "./interfaces/ICMCCore.sol",
              "id": 2587,
              "nodeType": "ImportDirective",
              "scope": 2714,
              "sourceUnit": 3754,
              "src": "98:35:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/ReentrancyGuard.sol",
              "file": "./ReentrancyGuard.sol",
              "id": 2588,
              "nodeType": "ImportDirective",
              "scope": 2714,
              "sourceUnit": 3443,
              "src": "134:31:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2590,
                    "name": "ReentrancyGuard",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3442,
                    "src": "419:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReentrancyGuard_$3442",
                      "typeString": "contract ReentrancyGuard"
                    }
                  },
                  "id": 2591,
                  "nodeType": "InheritanceSpecifier",
                  "src": "419:15:12"
                },
                {
                  "baseName": {
                    "id": 2592,
                    "name": "ICMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3753,
                    "src": "436:8:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCCore_$3753",
                      "typeString": "contract ICMCCore"
                    }
                  },
                  "id": 2593,
                  "nodeType": "InheritanceSpecifier",
                  "src": "436:8:12"
                }
              ],
              "contractDependencies": [
                3442,
                3753
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2589,
                "nodeType": "StructuredDocumentation",
                "src": "167:231:12",
                "text": "@title CMCCore\n @author Connext <support@connext.network>\n @notice Contains logic pertaining to the participants of a channel,\n         including setting and retrieving the participants and the\n         mastercopy."
              },
              "fullyImplemented": true,
              "id": 2713,
              "linearizedBaseContracts": [
                2713,
                3753,
                3442
              ],
              "name": "CMCCore",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 2595,
                  "mutability": "immutable",
                  "name": "mastercopyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 2713,
                  "src": "451:43:12",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2594,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "451:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 2597,
                  "mutability": "mutable",
                  "name": "alice",
                  "nodeType": "VariableDeclaration",
                  "scope": 2713,
                  "src": "501:22:12",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "501:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2599,
                  "mutability": "mutable",
                  "name": "bob",
                  "nodeType": "VariableDeclaration",
                  "scope": 2713,
                  "src": "529:20:12",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "529:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2610,
                    "nodeType": "Block",
                    "src": "829:50:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 2608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2603,
                            "name": "mastercopyAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2595,
                            "src": "839:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2606,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "867:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CMCCore_$2713",
                                  "typeString": "contract CMCCore"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_CMCCore_$2713",
                                  "typeString": "contract CMCCore"
                                }
                              ],
                              "id": 2605,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "859:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2604,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "859:7:12",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "859:13:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "839:33:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2609,
                        "nodeType": "ExpressionStatement",
                        "src": "839:33:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2600,
                    "nodeType": "StructuredDocumentation",
                    "src": "556:254:12",
                    "text": "@notice Set invalid participants to block the mastercopy from being used directly\n         Nonzero address also prevents the mastercopy from being setup\n         Only setting alice is sufficient, setting bob too wouldn't change anything"
                  },
                  "id": 2611,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2601,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "826:2:12"
                  },
                  "returnParameters": {
                    "id": 2602,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "829:0:12"
                  },
                  "scope": 2713,
                  "src": "815:64:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2624,
                    "nodeType": "Block",
                    "src": "985:135:12",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 2616,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1024:4:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                                      "typeString": "contract CMCCore"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                                      "typeString": "contract CMCCore"
                                    }
                                  ],
                                  "id": 2615,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1016:7:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2614,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1016:7:12",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2617,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1016:13:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 2618,
                                "name": "mastercopyAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2595,
                                "src": "1033:17:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1016:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4d6173746572636f70793a204f4e4c595f5649415f50524f5859",
                              "id": 2620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1064:28:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f3f032bee683e814aa72f44934f39a498a95e932db1f064138b410395748316d",
                                "typeString": "literal_string \"Mastercopy: ONLY_VIA_PROXY\""
                              },
                              "value": "Mastercopy: ONLY_VIA_PROXY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f3f032bee683e814aa72f44934f39a498a95e932db1f064138b410395748316d",
                                "typeString": "literal_string \"Mastercopy: ONLY_VIA_PROXY\""
                              }
                            ],
                            "id": 2613,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "995:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "995:107:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2622,
                        "nodeType": "ExpressionStatement",
                        "src": "995:107:12"
                      },
                      {
                        "id": 2623,
                        "nodeType": "PlaceholderStatement",
                        "src": "1112:1:12"
                      }
                    ]
                  },
                  "id": 2625,
                  "name": "onlyViaProxy",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2612,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "985:0:12"
                  },
                  "src": "963:157:12",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3742
                  ],
                  "body": {
                    "id": 2683,
                    "nodeType": "Block",
                    "src": "1426:343:12",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2637,
                                "name": "alice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2597,
                                "src": "1444:5:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 2640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1461:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 2639,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1453:7:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2638,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1453:7:12",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2641,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1453:10:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "1444:19:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d43436f72653a20414c52454144595f5345545550",
                              "id": 2643,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1465:24:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c99fb14c7afbcc28d9326139642dcd2b96b363ce69f383f642d1f77c8afbc278",
                                "typeString": "literal_string \"CMCCore: ALREADY_SETUP\""
                              },
                              "value": "CMCCore: ALREADY_SETUP"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c99fb14c7afbcc28d9326139642dcd2b96b363ce69f383f642d1f77c8afbc278",
                                "typeString": "literal_string \"CMCCore: ALREADY_SETUP\""
                              }
                            ],
                            "id": 2636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1436:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1436:54:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2645,
                        "nodeType": "ExpressionStatement",
                        "src": "1436:54:12"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 2652,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2647,
                                  "name": "_alice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2628,
                                  "src": "1521:6:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 2650,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1539:1:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 2649,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1531:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 2648,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1531:7:12",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2651,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1531:10:12",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "1521:20:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 2658,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2653,
                                  "name": "_bob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2630,
                                  "src": "1545:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 2656,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1561:1:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 2655,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1553:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 2654,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1553:7:12",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2657,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1553:10:12",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "1545:18:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1521:42:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d43436f72653a20494e56414c49445f5041525449434950414e54",
                              "id": 2660,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1577:30:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6a9fd4fe32a0dd129c79aa413766a0449675378ee36d56e623fcaa5361e50d90",
                                "typeString": "literal_string \"CMCCore: INVALID_PARTICIPANT\""
                              },
                              "value": "CMCCore: INVALID_PARTICIPANT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6a9fd4fe32a0dd129c79aa413766a0449675378ee36d56e623fcaa5361e50d90",
                                "typeString": "literal_string \"CMCCore: INVALID_PARTICIPANT\""
                              }
                            ],
                            "id": 2646,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1500:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1500:117:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2662,
                        "nodeType": "ExpressionStatement",
                        "src": "1500:117:12"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2666,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2664,
                                "name": "_alice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2628,
                                "src": "1635:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 2665,
                                "name": "_bob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2630,
                                "src": "1645:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1635:14:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d43436f72653a204944454e544943414c5f5041525449434950414e5453",
                              "id": 2667,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1651:33:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_28b37f6a628afff2146b834bb4cb5d0fc67d6a94a758564c55e0bd51943aae4f",
                                "typeString": "literal_string \"CMCCore: IDENTICAL_PARTICIPANTS\""
                              },
                              "value": "CMCCore: IDENTICAL_PARTICIPANTS"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_28b37f6a628afff2146b834bb4cb5d0fc67d6a94a758564c55e0bd51943aae4f",
                                "typeString": "literal_string \"CMCCore: IDENTICAL_PARTICIPANTS\""
                              }
                            ],
                            "id": 2663,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1627:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1627:58:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2669,
                        "nodeType": "ExpressionStatement",
                        "src": "1627:58:12"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2670,
                              "name": "ReentrancyGuard",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3442,
                              "src": "1695:15:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ReentrancyGuard_$3442_$",
                                "typeString": "type(contract ReentrancyGuard)"
                              }
                            },
                            "id": 2672,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setup",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3411,
                            "src": "1695:21:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 2673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1695:23:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2674,
                        "nodeType": "ExpressionStatement",
                        "src": "1695:23:12"
                      },
                      {
                        "expression": {
                          "id": 2677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2675,
                            "name": "alice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2597,
                            "src": "1728:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2676,
                            "name": "_alice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2628,
                            "src": "1736:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1728:14:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2678,
                        "nodeType": "ExpressionStatement",
                        "src": "1728:14:12"
                      },
                      {
                        "expression": {
                          "id": 2681,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2679,
                            "name": "bob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2599,
                            "src": "1752:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2680,
                            "name": "_bob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2630,
                            "src": "1758:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1752:10:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2682,
                        "nodeType": "ExpressionStatement",
                        "src": "1752:10:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2626,
                    "nodeType": "StructuredDocumentation",
                    "src": "1126:191:12",
                    "text": "@notice Contract constructor for Proxied copies\n @param _alice: Address representing user with function deposit\n @param _bob: Address representing user with multisig deposit"
                  },
                  "functionSelector": "2d34ba79",
                  "id": 2684,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2634,
                      "modifierName": {
                        "id": 2633,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1409:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1409:12:12"
                    }
                  ],
                  "name": "setup",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2632,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1392:8:12"
                  },
                  "parameters": {
                    "id": 2631,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2628,
                        "mutability": "mutable",
                        "name": "_alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 2684,
                        "src": "1337:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2627,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1337:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2630,
                        "mutability": "mutable",
                        "name": "_bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 2684,
                        "src": "1353:12:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2629,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1353:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1336:30:12"
                  },
                  "returnParameters": {
                    "id": 2635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1426:0:12"
                  },
                  "scope": 2713,
                  "src": "1322:447:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3747
                  ],
                  "body": {
                    "id": 2697,
                    "nodeType": "Block",
                    "src": "2017:29:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 2695,
                          "name": "alice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2597,
                          "src": "2034:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2694,
                        "id": 2696,
                        "nodeType": "Return",
                        "src": "2027:12:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2685,
                    "nodeType": "StructuredDocumentation",
                    "src": "1775:94:12",
                    "text": "@notice A getter function for the bob of the multisig\n @return Bob's signer address"
                  },
                  "functionSelector": "eeb30fea",
                  "id": 2698,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2689,
                      "modifierName": {
                        "id": 2688,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1949:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1949:12:12"
                    },
                    {
                      "id": 2691,
                      "modifierName": {
                        "id": 2690,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "1970:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1970:16:12"
                    }
                  ],
                  "name": "getAlice",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2687,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1932:8:12"
                  },
                  "parameters": {
                    "id": 2686,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1891:2:12"
                  },
                  "returnParameters": {
                    "id": 2694,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2693,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2698,
                        "src": "2004:7:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2692,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2004:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2003:9:12"
                  },
                  "scope": 2713,
                  "src": "1874:172:12",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3752
                  ],
                  "body": {
                    "id": 2711,
                    "nodeType": "Block",
                    "src": "2294:27:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 2709,
                          "name": "bob",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2599,
                          "src": "2311:3:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2708,
                        "id": 2710,
                        "nodeType": "Return",
                        "src": "2304:10:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2699,
                    "nodeType": "StructuredDocumentation",
                    "src": "2052:96:12",
                    "text": "@notice A getter function for the bob of the multisig\n @return Alice's signer address"
                  },
                  "functionSelector": "241686a0",
                  "id": 2712,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2703,
                      "modifierName": {
                        "id": 2702,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "2226:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2226:12:12"
                    },
                    {
                      "id": 2705,
                      "modifierName": {
                        "id": 2704,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "2247:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2247:16:12"
                    }
                  ],
                  "name": "getBob",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2701,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2209:8:12"
                  },
                  "parameters": {
                    "id": 2700,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2168:2:12"
                  },
                  "returnParameters": {
                    "id": 2708,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2707,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2712,
                        "src": "2281:7:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2706,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2281:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2280:9:12"
                  },
                  "scope": 2713,
                  "src": "2153:168:12",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2714,
              "src": "399:1924:12"
            }
          ],
          "src": "39:2285:12"
        },
        "id": 12
      },
      "src.sol/CMCDeposit.sol": {
        "ast": {
          "absolutePath": "src.sol/CMCDeposit.sol",
          "exportedSymbols": {
            "CMCDeposit": [
              2870
            ]
          },
          "id": 2871,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2715,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:13"
            },
            {
              "id": 2716,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:13"
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCDeposit.sol",
              "file": "./interfaces/ICMCDeposit.sol",
              "id": 2717,
              "nodeType": "ImportDirective",
              "scope": 2871,
              "sourceUnit": 3785,
              "src": "98:38:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCCore.sol",
              "file": "./CMCCore.sol",
              "id": 2718,
              "nodeType": "ImportDirective",
              "scope": 2871,
              "sourceUnit": 2714,
              "src": "137:23:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCAsset.sol",
              "file": "./CMCAsset.sol",
              "id": 2719,
              "nodeType": "ImportDirective",
              "scope": 2871,
              "sourceUnit": 2584,
              "src": "161:24:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibAsset.sol",
              "file": "./lib/LibAsset.sol",
              "id": 2720,
              "nodeType": "ImportDirective",
              "scope": 2871,
              "sourceUnit": 4164,
              "src": "186:28:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibERC20.sol",
              "file": "./lib/LibERC20.sol",
              "id": 2721,
              "nodeType": "ImportDirective",
              "scope": 2871,
              "sourceUnit": 4407,
              "src": "215:28:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2723,
                    "name": "CMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2713,
                    "src": "635:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                      "typeString": "contract CMCCore"
                    }
                  },
                  "id": 2724,
                  "nodeType": "InheritanceSpecifier",
                  "src": "635:7:13"
                },
                {
                  "baseName": {
                    "id": 2725,
                    "name": "CMCAsset",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2583,
                    "src": "644:8:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCAsset_$2583",
                      "typeString": "contract CMCAsset"
                    }
                  },
                  "id": 2726,
                  "nodeType": "InheritanceSpecifier",
                  "src": "644:8:13"
                },
                {
                  "baseName": {
                    "id": 2727,
                    "name": "ICMCDeposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3784,
                    "src": "654:11:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCDeposit_$3784",
                      "typeString": "contract ICMCDeposit"
                    }
                  },
                  "id": 2728,
                  "nodeType": "InheritanceSpecifier",
                  "src": "654:11:13"
                }
              ],
              "contractDependencies": [
                2583,
                2713,
                3442,
                3732,
                3753,
                3784
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2722,
                "nodeType": "StructuredDocumentation",
                "src": "245:366:13",
                "text": "@title CMCDeposit\n @author Connext <support@connext.network>\n @notice Contains logic supporting channel multisig deposits. Channel\n         funding is asymmetric, with `alice` having to call a deposit\n         function which tracks the total amount she has deposited so far,\n         and any other funds in the multisig being attributed to `bob`."
              },
              "fullyImplemented": true,
              "id": 2870,
              "linearizedBaseContracts": [
                2870,
                3784,
                2583,
                3732,
                2713,
                3753,
                3442
              ],
              "name": "CMCDeposit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 2732,
                  "mutability": "mutable",
                  "name": "depositsAlice",
                  "nodeType": "VariableDeclaration",
                  "scope": 2870,
                  "src": "672:49:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 2731,
                    "keyType": {
                      "id": 2729,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "680:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "672:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 2730,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "691:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2739,
                    "nodeType": "Block",
                    "src": "781:2:13",
                    "statements": []
                  },
                  "id": 2740,
                  "implemented": true,
                  "kind": "receive",
                  "modifiers": [
                    {
                      "id": 2735,
                      "modifierName": {
                        "id": 2734,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "755:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "755:12:13"
                    },
                    {
                      "id": 2737,
                      "modifierName": {
                        "id": 2736,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "768:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "768:12:13"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2733,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "735:2:13"
                  },
                  "returnParameters": {
                    "id": 2738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "781:0:13"
                  },
                  "scope": 2870,
                  "src": "728:55:13",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3769
                  ],
                  "body": {
                    "id": 2756,
                    "nodeType": "Block",
                    "src": "960:55:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2753,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2742,
                              "src": "1000:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2752,
                            "name": "_getTotalDepositsAlice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2769,
                            "src": "977:22:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 2754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "977:31:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2751,
                        "id": 2755,
                        "nodeType": "Return",
                        "src": "970:38:13"
                      }
                    ]
                  },
                  "functionSelector": "6f33389e",
                  "id": 2757,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2746,
                      "modifierName": {
                        "id": 2745,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "892:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "892:12:13"
                    },
                    {
                      "id": 2748,
                      "modifierName": {
                        "id": 2747,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "913:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "913:16:13"
                    }
                  ],
                  "name": "getTotalDepositsAlice",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2744,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "875:8:13"
                  },
                  "parameters": {
                    "id": 2743,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2742,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2757,
                        "src": "820:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2741,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "820:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "819:17:13"
                  },
                  "returnParameters": {
                    "id": 2751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2750,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2757,
                        "src": "947:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2749,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "947:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "946:9:13"
                  },
                  "scope": 2870,
                  "src": "789:226:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2768,
                    "nodeType": "Block",
                    "src": "1130:46:13",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 2764,
                            "name": "depositsAlice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2732,
                            "src": "1147:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2766,
                          "indexExpression": {
                            "id": 2765,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2759,
                            "src": "1161:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1147:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2763,
                        "id": 2767,
                        "nodeType": "Return",
                        "src": "1140:29:13"
                      }
                    ]
                  },
                  "id": 2769,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getTotalDepositsAlice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2760,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2759,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2769,
                        "src": "1053:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2758,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1053:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1052:17:13"
                  },
                  "returnParameters": {
                    "id": 2763,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2762,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2769,
                        "src": "1117:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2761,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1117:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1116:9:13"
                  },
                  "scope": 2870,
                  "src": "1021:155:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3776
                  ],
                  "body": {
                    "id": 2785,
                    "nodeType": "Block",
                    "src": "1351:53:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2782,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2771,
                              "src": "1389:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2781,
                            "name": "_getTotalDepositsBob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2807,
                            "src": "1368:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 2783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1368:29:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2780,
                        "id": 2784,
                        "nodeType": "Return",
                        "src": "1361:36:13"
                      }
                    ]
                  },
                  "functionSelector": "b081e9c8",
                  "id": 2786,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2775,
                      "modifierName": {
                        "id": 2774,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1283:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1283:12:13"
                    },
                    {
                      "id": 2777,
                      "modifierName": {
                        "id": 2776,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "1304:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1304:16:13"
                    }
                  ],
                  "name": "getTotalDepositsBob",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2773,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1266:8:13"
                  },
                  "parameters": {
                    "id": 2772,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2771,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2786,
                        "src": "1211:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2770,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1211:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1210:17:13"
                  },
                  "returnParameters": {
                    "id": 2780,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2779,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2786,
                        "src": "1338:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2778,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1338:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1337:9:13"
                  },
                  "scope": 2870,
                  "src": "1182:222:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2806,
                    "nodeType": "Block",
                    "src": "1602:144:13",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 2795,
                                  "name": "assetId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2788,
                                  "src": "1654:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 2793,
                                  "name": "LibAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4163,
                                  "src": "1631:8:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_LibAsset_$4163_$",
                                    "typeString": "type(library LibAsset)"
                                  }
                                },
                                "id": 2794,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getOwnBalance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4087,
                                "src": "1631:22:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 2796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1631:31:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "baseExpression": {
                                "id": 2797,
                                "name": "totalTransferred",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2348,
                                "src": "1677:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2799,
                              "indexExpression": {
                                "id": 2798,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2788,
                                "src": "1694:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1677:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1631:71:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 2801,
                              "name": "depositsAlice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2732,
                              "src": "1717:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2803,
                            "indexExpression": {
                              "id": 2802,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2788,
                              "src": "1731:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1717:22:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1631:108:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2792,
                        "id": 2805,
                        "nodeType": "Return",
                        "src": "1612:127:13"
                      }
                    ]
                  },
                  "id": 2807,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getTotalDepositsBob",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2789,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2788,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2807,
                        "src": "1525:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2787,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1525:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1524:17:13"
                  },
                  "returnParameters": {
                    "id": 2792,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2791,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2807,
                        "src": "1589:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2790,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1589:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1588:9:13"
                  },
                  "scope": 2870,
                  "src": "1495:251:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3783
                  ],
                  "body": {
                    "id": 2868,
                    "nodeType": "Block",
                    "src": "1903:697:13",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 2821,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2809,
                              "src": "1934:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 2819,
                              "name": "LibAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4163,
                              "src": "1917:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibAsset_$4163_$",
                                "typeString": "type(library LibAsset)"
                              }
                            },
                            "id": 2820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isEther",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4060,
                            "src": "1917:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) pure returns (bool)"
                            }
                          },
                          "id": 2822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1917:25:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2855,
                          "nodeType": "Block",
                          "src": "2033:420:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2836,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 2833,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "2121:3:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 2834,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "src": "2121:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 2835,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2134:1:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "2121:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434d434465706f7369743a204554485f574954485f4552435f5452414e53464552",
                                    "id": 2837,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2137:35:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_88fc287afadaae50383240bd23d17c7aadf02c7bff9471f8801cf6ade0559c5b",
                                      "typeString": "literal_string \"CMCDeposit: ETH_WITH_ERC_TRANSFER\""
                                    },
                                    "value": "CMCDeposit: ETH_WITH_ERC_TRANSFER"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_88fc287afadaae50383240bd23d17c7aadf02c7bff9471f8801cf6ade0559c5b",
                                      "typeString": "literal_string \"CMCDeposit: ETH_WITH_ERC_TRANSFER\""
                                    }
                                  ],
                                  "id": 2832,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "2113:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2838,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2113:60:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2839,
                              "nodeType": "ExpressionStatement",
                              "src": "2113:60:13"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 2843,
                                        "name": "assetId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2809,
                                        "src": "2255:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 2844,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -15,
                                          "src": "2284:3:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 2845,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "2284:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 2848,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -28,
                                            "src": "2324:4:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_CMCDeposit_$2870",
                                              "typeString": "contract CMCDeposit"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_CMCDeposit_$2870",
                                              "typeString": "contract CMCDeposit"
                                            }
                                          ],
                                          "id": 2847,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2316:7:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 2846,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2316:7:13",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 2849,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2316:13:13",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      {
                                        "id": 2850,
                                        "name": "amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2811,
                                        "src": "2351:6:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 2841,
                                        "name": "LibERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4406,
                                        "src": "2212:8:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_LibERC20_$4406_$",
                                          "typeString": "type(library LibERC20)"
                                        }
                                      },
                                      "id": 2842,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "transferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4383,
                                      "src": "2212:21:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                        "typeString": "function (address,address,address,uint256) returns (bool)"
                                      }
                                    },
                                    "id": 2851,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2212:163:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434d434465706f7369743a2045524332305f5452414e534645525f4641494c4544",
                                    "id": 2852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2393:35:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_6c729bc47471d664039d378a9e9ddcd0d3fafa6b4d96c4008c8016316840e39c",
                                      "typeString": "literal_string \"CMCDeposit: ERC20_TRANSFER_FAILED\""
                                    },
                                    "value": "CMCDeposit: ERC20_TRANSFER_FAILED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_6c729bc47471d664039d378a9e9ddcd0d3fafa6b4d96c4008c8016316840e39c",
                                      "typeString": "literal_string \"CMCDeposit: ERC20_TRANSFER_FAILED\""
                                    }
                                  ],
                                  "id": 2840,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "2187:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2187:255:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2854,
                              "nodeType": "ExpressionStatement",
                              "src": "2187:255:13"
                            }
                          ]
                        },
                        "id": 2856,
                        "nodeType": "IfStatement",
                        "src": "1913:540:13",
                        "trueBody": {
                          "id": 2831,
                          "nodeType": "Block",
                          "src": "1944:83:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2827,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 2824,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "1966:3:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 2825,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "src": "1966:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "id": 2826,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2811,
                                      "src": "1979:6:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1966:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434d434465706f7369743a2056414c55455f4d49534d41544348",
                                    "id": 2828,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1987:28:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_80d941bf3cc793fac2f70b318b929375a8e9e163c144ff8825af3c39fb267463",
                                      "typeString": "literal_string \"CMCDeposit: VALUE_MISMATCH\""
                                    },
                                    "value": "CMCDeposit: VALUE_MISMATCH"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_80d941bf3cc793fac2f70b318b929375a8e9e163c144ff8825af3c39fb267463",
                                      "typeString": "literal_string \"CMCDeposit: VALUE_MISMATCH\""
                                    }
                                  ],
                                  "id": 2823,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "1958:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1958:58:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2830,
                              "nodeType": "ExpressionStatement",
                              "src": "1958:58:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2857,
                              "name": "depositsAlice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2732,
                              "src": "2515:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2859,
                            "indexExpression": {
                              "id": 2858,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2809,
                              "src": "2529:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2515:22:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 2860,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2811,
                            "src": "2541:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2515:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2862,
                        "nodeType": "ExpressionStatement",
                        "src": "2515:32:13"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 2864,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2809,
                              "src": "2577:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2865,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2811,
                              "src": "2586:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2863,
                            "name": "AliceDeposited",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3762,
                            "src": "2562:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2562:31:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2867,
                        "nodeType": "EmitStatement",
                        "src": "2557:36:13"
                      }
                    ]
                  },
                  "functionSelector": "635ae901",
                  "id": 2869,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2815,
                      "modifierName": {
                        "id": 2814,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1865:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1865:12:13"
                    },
                    {
                      "id": 2817,
                      "modifierName": {
                        "id": 2816,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "1886:12:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1886:12:13"
                    }
                  ],
                  "name": "depositAlice",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2813,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1848:8:13"
                  },
                  "parameters": {
                    "id": 2812,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2809,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2869,
                        "src": "1774:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2808,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1774:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2811,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 2869,
                        "src": "1791:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2810,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1791:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1773:33:13"
                  },
                  "returnParameters": {
                    "id": 2818,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1903:0:13"
                  },
                  "scope": 2870,
                  "src": "1752:848:13",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2871,
              "src": "612:1990:13"
            }
          ],
          "src": "39:2564:13"
        },
        "id": 13
      },
      "src.sol/CMCWithdraw.sol": {
        "ast": {
          "absolutePath": "src.sol/CMCWithdraw.sol",
          "exportedSymbols": {
            "CMCWithdraw": [
              3081
            ]
          },
          "id": 3082,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2872,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:14"
            },
            {
              "id": 2873,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:14"
            },
            {
              "absolutePath": "src.sol/interfaces/Commitment.sol",
              "file": "./interfaces/Commitment.sol",
              "id": 2874,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 3535,
              "src": "98:37:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCWithdraw.sol",
              "file": "./interfaces/ICMCWithdraw.sol",
              "id": 2875,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 3820,
              "src": "136:39:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/WithdrawHelper.sol",
              "file": "./interfaces/WithdrawHelper.sol",
              "id": 2876,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 4036,
              "src": "176:41:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCCore.sol",
              "file": "./CMCCore.sol",
              "id": 2877,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 2714,
              "src": "218:23:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCAsset.sol",
              "file": "./CMCAsset.sol",
              "id": 2878,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 2584,
              "src": "242:24:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibAsset.sol",
              "file": "./lib/LibAsset.sol",
              "id": 2879,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 4164,
              "src": "267:28:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibChannelCrypto.sol",
              "file": "./lib/LibChannelCrypto.sol",
              "id": 2880,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 4284,
              "src": "296:36:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibUtils.sol",
              "file": "./lib/LibUtils.sol",
              "id": 2881,
              "nodeType": "ImportDirective",
              "scope": 3082,
              "sourceUnit": 4787,
              "src": "333:28:14",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2883,
                    "name": "CMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2713,
                    "src": "760:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                      "typeString": "contract CMCCore"
                    }
                  },
                  "id": 2884,
                  "nodeType": "InheritanceSpecifier",
                  "src": "760:7:14"
                },
                {
                  "baseName": {
                    "id": 2885,
                    "name": "CMCAsset",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2583,
                    "src": "769:8:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCAsset_$2583",
                      "typeString": "contract CMCAsset"
                    }
                  },
                  "id": 2886,
                  "nodeType": "InheritanceSpecifier",
                  "src": "769:8:14"
                },
                {
                  "baseName": {
                    "id": 2887,
                    "name": "ICMCWithdraw",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3819,
                    "src": "779:12:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCWithdraw_$3819",
                      "typeString": "contract ICMCWithdraw"
                    }
                  },
                  "id": 2888,
                  "nodeType": "InheritanceSpecifier",
                  "src": "779:12:14"
                }
              ],
              "contractDependencies": [
                2583,
                2713,
                3442,
                3732,
                3753,
                3819
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2882,
                "nodeType": "StructuredDocumentation",
                "src": "363:372:14",
                "text": "@title CMCWithdraw\n @author Connext <support@connext.network>\n @notice Contains logic for all cooperative channel multisig withdrawals.\n         Cooperative withdrawal commitments must be signed by both channel\n         participants. As part of the channel withdrawals, an arbitrary\n         call can be made, which is extracted from the withdraw data."
              },
              "fullyImplemented": true,
              "id": 3081,
              "linearizedBaseContracts": [
                3081,
                3819,
                2583,
                3732,
                2713,
                3753,
                3442
              ],
              "name": "CMCWithdraw",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 2891,
                  "libraryName": {
                    "id": 2889,
                    "name": "LibChannelCrypto",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4283,
                    "src": "804:16:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibChannelCrypto_$4283",
                      "typeString": "library LibChannelCrypto"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "798:35:14",
                  "typeName": {
                    "id": 2890,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "825:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 2895,
                  "mutability": "mutable",
                  "name": "isExecuted",
                  "nodeType": "VariableDeclaration",
                  "scope": 3081,
                  "src": "839:43:14",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                    "typeString": "mapping(bytes32 => bool)"
                  },
                  "typeName": {
                    "id": 2894,
                    "keyType": {
                      "id": 2892,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "847:7:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "839:24:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                      "typeString": "mapping(bytes32 => bool)"
                    },
                    "valueType": {
                      "id": 2893,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "858:4:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2911,
                    "nodeType": "Block",
                    "src": "945:138:14",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2906,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2900,
                                  "name": "wd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2897,
                                  "src": "976:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                    "typeString": "struct WithdrawData calldata"
                                  }
                                },
                                "id": 2901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "channelAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3789,
                                "src": "976:17:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 2904,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1005:4:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CMCWithdraw_$3081",
                                      "typeString": "contract CMCWithdraw"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_CMCWithdraw_$3081",
                                      "typeString": "contract CMCWithdraw"
                                    }
                                  ],
                                  "id": 2903,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "997:7:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2902,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "997:7:14",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2905,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "997:13:14",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "976:34:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4357697468647261773a204348414e4e454c5f4d49534d41544348",
                              "id": 2907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1024:31:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1312acbd248c80b712d3793736a84689c918ce26527f6f05834ede94a3cda32f",
                                "typeString": "literal_string \"CMCWithdraw: CHANNEL_MISMATCH\""
                              },
                              "value": "CMCWithdraw: CHANNEL_MISMATCH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1312acbd248c80b712d3793736a84689c918ce26527f6f05834ede94a3cda32f",
                                "typeString": "literal_string \"CMCWithdraw: CHANNEL_MISMATCH\""
                              }
                            ],
                            "id": 2899,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "955:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "955:110:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2909,
                        "nodeType": "ExpressionStatement",
                        "src": "955:110:14"
                      },
                      {
                        "id": 2910,
                        "nodeType": "PlaceholderStatement",
                        "src": "1075:1:14"
                      }
                    ]
                  },
                  "id": 2912,
                  "name": "validateWithdrawData",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2898,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2897,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 2912,
                        "src": "919:24:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 2896,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "919:12:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "918:26:14"
                  },
                  "src": "889:194:14",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3809
                  ],
                  "body": {
                    "id": 2930,
                    "nodeType": "Block",
                    "src": "1275:56:14",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 2924,
                            "name": "isExecuted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2895,
                            "src": "1292:10:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 2928,
                          "indexExpression": {
                            "arguments": [
                              {
                                "id": 2926,
                                "name": "wd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2914,
                                "src": "1320:2:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                  "typeString": "struct WithdrawData calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                  "typeString": "struct WithdrawData calldata"
                                }
                              ],
                              "id": 2925,
                              "name": "hashWithdrawData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3080,
                              "src": "1303:16:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_WithdrawData_$3802_calldata_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (struct WithdrawData calldata) pure returns (bytes32)"
                              }
                            },
                            "id": 2927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1303:20:14",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1292:32:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2923,
                        "id": 2929,
                        "nodeType": "Return",
                        "src": "1285:39:14"
                      }
                    ]
                  },
                  "functionSelector": "8c048fc2",
                  "id": 2931,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2918,
                      "modifierName": {
                        "id": 2917,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1210:12:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1210:12:14"
                    },
                    {
                      "id": 2920,
                      "modifierName": {
                        "id": 2919,
                        "name": "nonReentrantView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3441,
                        "src": "1231:16:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1231:16:14"
                    }
                  ],
                  "name": "getWithdrawalTransactionRecord",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2916,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1193:8:14"
                  },
                  "parameters": {
                    "id": 2915,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2914,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 2931,
                        "src": "1129:24:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 2913,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "1129:12:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1128:26:14"
                  },
                  "returnParameters": {
                    "id": 2923,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2922,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2931,
                        "src": "1265:4:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2921,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1265:4:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1264:6:14"
                  },
                  "scope": 3081,
                  "src": "1089:242:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3818
                  ],
                  "body": {
                    "id": 3025,
                    "nodeType": "Block",
                    "src": "1970:963:14",
                    "statements": [
                      {
                        "assignments": [
                          2950
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2950,
                            "mutability": "mutable",
                            "name": "wdHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 3025,
                            "src": "2005:14:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 2949,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2005:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2954,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2952,
                              "name": "wd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2934,
                              "src": "2039:2:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                "typeString": "struct WithdrawData calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                "typeString": "struct WithdrawData calldata"
                              }
                            ],
                            "id": 2951,
                            "name": "hashWithdrawData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3080,
                            "src": "2022:16:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_WithdrawData_$3802_calldata_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (struct WithdrawData calldata) pure returns (bytes32)"
                            }
                          },
                          "id": 2953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2022:20:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2005:37:14"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2956,
                              "name": "wdHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2950,
                              "src": "2155:6:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 2957,
                              "name": "aliceSignature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2936,
                              "src": "2163:14:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 2958,
                              "name": "bobSignature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2938,
                              "src": "2179:12:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 2955,
                            "name": "verifySignaturesOnWithdrawDataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3065,
                            "src": "2120:34:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                              "typeString": "function (bytes32,bytes calldata,bytes calldata) view"
                            }
                          },
                          "id": 2959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2120:72:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2960,
                        "nodeType": "ExpressionStatement",
                        "src": "2120:72:14"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "2240:19:14",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 2962,
                                  "name": "isExecuted",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2895,
                                  "src": "2241:10:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                    "typeString": "mapping(bytes32 => bool)"
                                  }
                                },
                                "id": 2964,
                                "indexExpression": {
                                  "id": 2963,
                                  "name": "wdHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2950,
                                  "src": "2252:6:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2241:18:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4357697468647261773a20414c52454144595f4558454355544544",
                              "id": 2966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2261:31:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7ee3108340cca9fd7fca8efb94b07a67996044e6f335bff6ac08e5f0dd0ec63e",
                                "typeString": "literal_string \"CMCWithdraw: ALREADY_EXECUTED\""
                              },
                              "value": "CMCWithdraw: ALREADY_EXECUTED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7ee3108340cca9fd7fca8efb94b07a67996044e6f335bff6ac08e5f0dd0ec63e",
                                "typeString": "literal_string \"CMCWithdraw: ALREADY_EXECUTED\""
                              }
                            ],
                            "id": 2961,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2232:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2232:61:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2968,
                        "nodeType": "ExpressionStatement",
                        "src": "2232:61:14"
                      },
                      {
                        "expression": {
                          "id": 2973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2969,
                              "name": "isExecuted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2895,
                              "src": "2303:10:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                              }
                            },
                            "id": 2971,
                            "indexExpression": {
                              "id": 2970,
                              "name": "wdHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2950,
                              "src": "2314:6:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2303:18:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 2972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2324:4:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "2303:25:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2974,
                        "nodeType": "ExpressionStatement",
                        "src": "2303:25:14"
                      },
                      {
                        "assignments": [
                          2976
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2976,
                            "mutability": "mutable",
                            "name": "actualAmount",
                            "nodeType": "VariableDeclaration",
                            "scope": 3025,
                            "src": "2389:20:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2975,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2389:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2983,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2978,
                                "name": "wd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2934,
                                "src": "2431:2:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                  "typeString": "struct WithdrawData calldata"
                                }
                              },
                              "id": 2979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "assetId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3791,
                              "src": "2431:10:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 2980,
                                "name": "wd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2934,
                                "src": "2443:2:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                  "typeString": "struct WithdrawData calldata"
                                }
                              },
                              "id": 2981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3795,
                              "src": "2443:9:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2977,
                            "name": "getAvailableAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2491,
                            "src": "2412:18:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 2982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2412:41:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2389:64:14"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2987,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2985,
                                  "name": "actualAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2976,
                                  "src": "2542:12:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2986,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2557:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2542:16:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 2994,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 2988,
                                    "name": "wd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2934,
                                    "src": "2562:2:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                      "typeString": "struct WithdrawData calldata"
                                    }
                                  },
                                  "id": 2989,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "callTo",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3799,
                                  "src": "2562:9:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 2992,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2583:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 2991,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2575:7:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 2990,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2575:7:14",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2993,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2575:10:14",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "2562:23:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2542:43:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4357697468647261773a204e4f5f4f50",
                              "id": 2996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2599:20:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_148fc94ba0b1c9e8ae70d500ebbc94f1218cf580302d654b723d3829f5dc8bf5",
                                "typeString": "literal_string \"CMCWithdraw: NO_OP\""
                              },
                              "value": "CMCWithdraw: NO_OP"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_148fc94ba0b1c9e8ae70d500ebbc94f1218cf580302d654b723d3829f5dc8bf5",
                                "typeString": "literal_string \"CMCWithdraw: NO_OP\""
                              }
                            ],
                            "id": 2984,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2521:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2521:108:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2998,
                        "nodeType": "ExpressionStatement",
                        "src": "2521:108:14"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3000,
                                "name": "wd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2934,
                                "src": "2699:2:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                  "typeString": "struct WithdrawData calldata"
                                }
                              },
                              "id": 3001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "assetId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3791,
                              "src": "2699:10:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 3002,
                                "name": "wd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2934,
                                "src": "2711:2:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                  "typeString": "struct WithdrawData calldata"
                                }
                              },
                              "id": 3003,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipient",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3793,
                              "src": "2711:12:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 3004,
                              "name": "actualAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2976,
                              "src": "2725:12:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2999,
                            "name": "transferAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2516,
                            "src": "2685:13:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address payable,uint256)"
                            }
                          },
                          "id": 3005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2685:53:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3006,
                        "nodeType": "ExpressionStatement",
                        "src": "2685:53:14"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3007,
                              "name": "wd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2934,
                              "src": "2826:2:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                "typeString": "struct WithdrawData calldata"
                              }
                            },
                            "id": 3008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "callTo",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3799,
                            "src": "2826:9:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3011,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2847:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 3010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2839:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3009,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2839:7:14",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2839:10:14",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "2826:23:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3024,
                        "nodeType": "IfStatement",
                        "src": "2822:105:14",
                        "trueBody": {
                          "id": 3023,
                          "nodeType": "Block",
                          "src": "2851:76:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3019,
                                    "name": "wd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2934,
                                    "src": "2899:2:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                      "typeString": "struct WithdrawData calldata"
                                    }
                                  },
                                  {
                                    "id": 3020,
                                    "name": "actualAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2976,
                                    "src": "2903:12:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                      "typeString": "struct WithdrawData calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 3015,
                                          "name": "wd",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2934,
                                          "src": "2880:2:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                            "typeString": "struct WithdrawData calldata"
                                          }
                                        },
                                        "id": 3016,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "callTo",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3799,
                                        "src": "2880:9:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 3014,
                                      "name": "WithdrawHelper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4035,
                                      "src": "2865:14:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_WithdrawHelper_$4035_$",
                                        "typeString": "type(contract WithdrawHelper)"
                                      }
                                    },
                                    "id": 3017,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2865:25:14",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_WithdrawHelper_$4035",
                                      "typeString": "contract WithdrawHelper"
                                    }
                                  },
                                  "id": 3018,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "execute",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4034,
                                  "src": "2865:33:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_struct$_WithdrawData_$3802_memory_ptr_$_t_uint256_$returns$__$",
                                    "typeString": "function (struct WithdrawData memory,uint256) external"
                                  }
                                },
                                "id": 3021,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2865:51:14",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3022,
                              "nodeType": "ExpressionStatement",
                              "src": "2865:51:14"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2932,
                    "nodeType": "StructuredDocumentation",
                    "src": "1337:425:14",
                    "text": "@param wd The withdraw data consisting of\n semantic withdraw information, i.e. assetId, recipient, and amount;\n information to make an optional call in addition to the actual transfer,\n i.e. target address for the call and call payload;\n additional information, i.e. channel address and nonce.\n @param aliceSignature Signature of owner a\n @param bobSignature Signature of owner b"
                  },
                  "functionSelector": "2c889aa1",
                  "id": 3026,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2942,
                      "modifierName": {
                        "id": 2941,
                        "name": "onlyViaProxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2625,
                        "src": "1919:12:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1919:12:14"
                    },
                    {
                      "id": 2944,
                      "modifierName": {
                        "id": 2943,
                        "name": "nonReentrant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3430,
                        "src": "1932:12:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1932:12:14"
                    },
                    {
                      "arguments": [
                        {
                          "id": 2946,
                          "name": "wd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2934,
                          "src": "1966:2:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                            "typeString": "struct WithdrawData calldata"
                          }
                        }
                      ],
                      "id": 2947,
                      "modifierName": {
                        "id": 2945,
                        "name": "validateWithdrawData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2912,
                        "src": "1945:20:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_struct$_WithdrawData_$3802_calldata_ptr_$",
                          "typeString": "modifier (struct WithdrawData calldata)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1945:24:14"
                    }
                  ],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2940,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1910:8:14"
                  },
                  "parameters": {
                    "id": 2939,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2934,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 3026,
                        "src": "1794:24:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 2933,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "1794:12:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2936,
                        "mutability": "mutable",
                        "name": "aliceSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3026,
                        "src": "1828:29:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2935,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1828:5:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2938,
                        "mutability": "mutable",
                        "name": "bobSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3026,
                        "src": "1867:27:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2937,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1867:5:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1784:116:14"
                  },
                  "returnParameters": {
                    "id": 2948,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1970:0:14"
                  },
                  "scope": 3081,
                  "src": "1767:1166:14",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3064,
                    "nodeType": "Block",
                    "src": "3103:372:14",
                    "statements": [
                      {
                        "assignments": [
                          3036
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3036,
                            "mutability": "mutable",
                            "name": "commitment",
                            "nodeType": "VariableDeclaration",
                            "scope": 3064,
                            "src": "3113:18:14",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 3035,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "3113:7:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3045,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 3040,
                                    "name": "CommitmentType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3534,
                                    "src": "3167:14:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_CommitmentType_$3534_$",
                                      "typeString": "type(enum CommitmentType)"
                                    }
                                  },
                                  "id": 3041,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "WithdrawData",
                                  "nodeType": "MemberAccess",
                                  "src": "3167:27:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_CommitmentType_$3534",
                                    "typeString": "enum CommitmentType"
                                  }
                                },
                                {
                                  "id": 3042,
                                  "name": "wdHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3028,
                                  "src": "3196:6:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_CommitmentType_$3534",
                                    "typeString": "enum CommitmentType"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 3038,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3156:3:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3039,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "3156:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 3043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3156:47:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3037,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "3146:9:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3146:58:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3113:91:14"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3049,
                                  "name": "aliceSignature",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3030,
                                  "src": "3261:14:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                {
                                  "id": 3050,
                                  "name": "alice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2597,
                                  "src": "3277:5:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 3047,
                                  "name": "commitment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3036,
                                  "src": "3235:10:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 3048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "checkSignature",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4187,
                                "src": "3235:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                }
                              },
                              "id": 3051,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3235:48:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4357697468647261773a20494e56414c49445f414c4943455f534947",
                              "id": 3052,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3297:32:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b0359c1dad65ec916c2794eb8eb01f5c44bb1131ce89e135daa3b87d8cee2e9f",
                                "typeString": "literal_string \"CMCWithdraw: INVALID_ALICE_SIG\""
                              },
                              "value": "CMCWithdraw: INVALID_ALICE_SIG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b0359c1dad65ec916c2794eb8eb01f5c44bb1131ce89e135daa3b87d8cee2e9f",
                                "typeString": "literal_string \"CMCWithdraw: INVALID_ALICE_SIG\""
                              }
                            ],
                            "id": 3046,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3214:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3214:125:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3054,
                        "nodeType": "ExpressionStatement",
                        "src": "3214:125:14"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3058,
                                  "name": "bobSignature",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3032,
                                  "src": "3396:12:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                {
                                  "id": 3059,
                                  "name": "bob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2599,
                                  "src": "3410:3:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 3056,
                                  "name": "commitment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3036,
                                  "src": "3370:10:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 3057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "checkSignature",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4187,
                                "src": "3370:25:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                }
                              },
                              "id": 3060,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3370:44:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "434d4357697468647261773a20494e56414c49445f424f425f534947",
                              "id": 3061,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3428:30:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_661960df89d6d47356b12c6c20ec33bb362caa86b9c21622824ad05f3017693f",
                                "typeString": "literal_string \"CMCWithdraw: INVALID_BOB_SIG\""
                              },
                              "value": "CMCWithdraw: INVALID_BOB_SIG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_661960df89d6d47356b12c6c20ec33bb362caa86b9c21622824ad05f3017693f",
                                "typeString": "literal_string \"CMCWithdraw: INVALID_BOB_SIG\""
                              }
                            ],
                            "id": 3055,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3349:7:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3349:119:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3063,
                        "nodeType": "ExpressionStatement",
                        "src": "3349:119:14"
                      }
                    ]
                  },
                  "id": 3065,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifySignaturesOnWithdrawDataHash",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3033,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3028,
                        "mutability": "mutable",
                        "name": "wdHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 3065,
                        "src": "2992:14:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3027,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2992:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3030,
                        "mutability": "mutable",
                        "name": "aliceSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3065,
                        "src": "3016:29:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3029,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3016:5:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3032,
                        "mutability": "mutable",
                        "name": "bobSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3065,
                        "src": "3055:27:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3031,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3055:5:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2982:106:14"
                  },
                  "returnParameters": {
                    "id": 3034,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3103:0:14"
                  },
                  "scope": 3081,
                  "src": "2939:536:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3079,
                    "nodeType": "Block",
                    "src": "3593:49:14",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3075,
                                  "name": "wd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3067,
                                  "src": "3631:2:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                    "typeString": "struct WithdrawData calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                                    "typeString": "struct WithdrawData calldata"
                                  }
                                ],
                                "expression": {
                                  "id": 3073,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3620:3:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3074,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "3620:10:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 3076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3620:14:14",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3072,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "3610:9:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3610:25:14",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 3071,
                        "id": 3078,
                        "nodeType": "Return",
                        "src": "3603:32:14"
                      }
                    ]
                  },
                  "id": 3080,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hashWithdrawData",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3068,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3067,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 3080,
                        "src": "3507:24:14",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 3066,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "3507:12:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3506:26:14"
                  },
                  "returnParameters": {
                    "id": 3071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3070,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3080,
                        "src": "3580:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3069,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3580:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3579:9:14"
                  },
                  "scope": 3081,
                  "src": "3481:161:14",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3082,
              "src": "736:2908:14"
            }
          ],
          "src": "39:3606:14"
        },
        "id": 14
      },
      "src.sol/ChannelFactory.sol": {
        "ast": {
          "absolutePath": "src.sol/ChannelFactory.sol",
          "exportedSymbols": {
            "ChannelFactory": [
              3368
            ]
          },
          "id": 3369,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3083,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:15"
            },
            {
              "id": 3084,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:15"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Create2.sol",
              "file": "@openzeppelin/contracts/utils/Create2.sol",
              "id": 3085,
              "nodeType": "ImportDirective",
              "scope": 3369,
              "sourceUnit": 1467,
              "src": "98:51:15",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/IChannelFactory.sol",
              "file": "./interfaces/IChannelFactory.sol",
              "id": 3086,
              "nodeType": "ImportDirective",
              "scope": 3369,
              "sourceUnit": 3879,
              "src": "151:42:15",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/IVectorChannel.sol",
              "file": "./interfaces/IVectorChannel.sol",
              "id": 3087,
              "nodeType": "ImportDirective",
              "scope": 3369,
              "sourceUnit": 4012,
              "src": "194:41:15",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibAsset.sol",
              "file": "./lib/LibAsset.sol",
              "id": 3088,
              "nodeType": "ImportDirective",
              "scope": 3369,
              "sourceUnit": 4164,
              "src": "236:28:15",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibERC20.sol",
              "file": "./lib/LibERC20.sol",
              "id": 3089,
              "nodeType": "ImportDirective",
              "scope": 3369,
              "sourceUnit": 4407,
              "src": "265:28:15",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3091,
                    "name": "IChannelFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3878,
                    "src": "455:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IChannelFactory_$3878",
                      "typeString": "contract IChannelFactory"
                    }
                  },
                  "id": 3092,
                  "nodeType": "InheritanceSpecifier",
                  "src": "455:15:15"
                }
              ],
              "contractDependencies": [
                3878
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3090,
                "nodeType": "StructuredDocumentation",
                "src": "295:133:15",
                "text": "@title ChannelFactory\n @author Connext <support@connext.network>\n @notice Creates and sets up a new channel proxy contract"
              },
              "fullyImplemented": true,
              "id": 3368,
              "linearizedBaseContracts": [
                3368,
                3878
              ],
              "name": "ChannelFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 3095,
                  "mutability": "constant",
                  "name": "proxyCreationCodePrefix",
                  "nodeType": "VariableDeclaration",
                  "scope": 3368,
                  "src": "527:103:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3093,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "527:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": {
                    "hexValue": "3d602d80600a3d3981f3363d3d373d3d3d363d73",
                    "id": 3094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "hexString",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "584:46:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                      "typeString": "literal_string (contains invalid UTF-8 sequence at position 3)"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 3098,
                  "mutability": "constant",
                  "name": "proxyCreationCodeSuffix",
                  "nodeType": "VariableDeclaration",
                  "scope": 3368,
                  "src": "636:92:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3096,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": {
                    "hexValue": "5af43d82803e903d91602b57fd5bf3",
                    "id": 3097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "hexString",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "693:35:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                      "typeString": "literal_string (contains invalid UTF-8 sequence at position 3)"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 3100,
                  "mutability": "mutable",
                  "name": "creationCodeHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 3368,
                  "src": "735:32:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3099,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "735:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 3102,
                  "mutability": "immutable",
                  "name": "mastercopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 3368,
                  "src": "773:36:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3101,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "773:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 3104,
                  "mutability": "immutable",
                  "name": "chainId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3368,
                  "src": "815:33:15",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "815:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3128,
                    "nodeType": "Block",
                    "src": "1197:143:15",
                    "statements": [
                      {
                        "expression": {
                          "id": 3114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3112,
                            "name": "mastercopy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3102,
                            "src": "1207:10:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3113,
                            "name": "_mastercopy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3107,
                            "src": "1220:11:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1207:24:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3115,
                        "nodeType": "ExpressionStatement",
                        "src": "1207:24:15"
                      },
                      {
                        "expression": {
                          "id": 3118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3116,
                            "name": "chainId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3104,
                            "src": "1241:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3117,
                            "name": "_chainId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3109,
                            "src": "1251:8:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1241:18:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3119,
                        "nodeType": "ExpressionStatement",
                        "src": "1241:18:15"
                      },
                      {
                        "expression": {
                          "id": 3126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3120,
                            "name": "creationCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3100,
                            "src": "1269:16:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 3123,
                                    "name": "_mastercopy",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3107,
                                    "src": "1320:11:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3122,
                                  "name": "_getProxyCreationCode",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3320,
                                  "src": "1298:21:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address) pure returns (bytes memory)"
                                  }
                                },
                                "id": 3124,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1298:34:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3121,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "1288:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 3125,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1288:45:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1269:64:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 3127,
                        "nodeType": "ExpressionStatement",
                        "src": "1269:64:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3105,
                    "nodeType": "StructuredDocumentation",
                    "src": "855:286:15",
                    "text": "@dev Creates a new `ChannelFactory`\n @param _mastercopy the address of the `ChannelMastercopy` (channel logic)\n @param _chainId the chain identifier when generating the CREATE2 salt. If zero, the chain identifier used in the proxy salt will be the result of the opcode"
                  },
                  "id": 3129,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3110,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3107,
                        "mutability": "mutable",
                        "name": "_mastercopy",
                        "nodeType": "VariableDeclaration",
                        "scope": 3129,
                        "src": "1158:19:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3106,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1158:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3109,
                        "mutability": "mutable",
                        "name": "_chainId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3129,
                        "src": "1179:16:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3108,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1179:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1157:39:15"
                  },
                  "returnParameters": {
                    "id": 3111,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1197:0:15"
                  },
                  "scope": 3368,
                  "src": "1146:194:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3831
                  ],
                  "body": {
                    "id": 3138,
                    "nodeType": "Block",
                    "src": "1572:34:15",
                    "statements": [
                      {
                        "expression": {
                          "id": 3136,
                          "name": "mastercopy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3102,
                          "src": "1589:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 3135,
                        "id": 3137,
                        "nodeType": "Return",
                        "src": "1582:17:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3130,
                    "nodeType": "StructuredDocumentation",
                    "src": "1414:87:15",
                    "text": "@dev Allows us to get the mastercopy that this factory will deploy channels against"
                  },
                  "functionSelector": "efe43693",
                  "id": 3139,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getMastercopy",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3132,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1545:8:15"
                  },
                  "parameters": {
                    "id": 3131,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1528:2:15"
                  },
                  "returnParameters": {
                    "id": 3135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3139,
                        "src": "1563:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3133,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1563:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1562:9:15"
                  },
                  "scope": 3368,
                  "src": "1506:100:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3836
                  ],
                  "body": {
                    "id": 3161,
                    "nodeType": "Block",
                    "src": "1771:246:15",
                    "statements": [
                      {
                        "assignments": [
                          3147
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3147,
                            "mutability": "mutable",
                            "name": "chain",
                            "nodeType": "VariableDeclaration",
                            "scope": 3161,
                            "src": "1829:13:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3146,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1829:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3149,
                        "initialValue": {
                          "id": 3148,
                          "name": "chainId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3104,
                          "src": "1845:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1829:23:15"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3150,
                            "name": "chain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3147,
                            "src": "1866:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1875:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1866:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3159,
                          "nodeType": "Block",
                          "src": "1970:41:15",
                          "statements": [
                            {
                              "expression": {
                                "id": 3157,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3155,
                                  "name": "_chainId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3144,
                                  "src": "1984:8:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 3156,
                                  "name": "chain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3147,
                                  "src": "1995:5:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1984:16:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3158,
                              "nodeType": "ExpressionStatement",
                              "src": "1984:16:15"
                            }
                          ]
                        },
                        "id": 3160,
                        "nodeType": "IfStatement",
                        "src": "1862:149:15",
                        "trueBody": {
                          "id": 3154,
                          "nodeType": "Block",
                          "src": "1878:86:15",
                          "statements": [
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "1901:53:15",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1919:21:15",
                                    "value": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "chainid",
                                        "nodeType": "YulIdentifier",
                                        "src": "1931:7:15"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1931:9:15"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "_chainId",
                                        "nodeType": "YulIdentifier",
                                        "src": "1919:8:15"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 3144,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "1919:8:15",
                                  "valueSize": 1
                                }
                              ],
                              "id": 3153,
                              "nodeType": "InlineAssembly",
                              "src": "1892:62:15"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3140,
                    "nodeType": "StructuredDocumentation",
                    "src": "1612:84:15",
                    "text": "@dev Allows us to get the chainId that this factory will use in the create2 salt"
                  },
                  "functionSelector": "3408e470",
                  "id": 3162,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getChainId",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3142,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1735:8:15"
                  },
                  "parameters": {
                    "id": 3141,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1720:2:15"
                  },
                  "returnParameters": {
                    "id": 3145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3144,
                        "mutability": "mutable",
                        "name": "_chainId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3162,
                        "src": "1753:16:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3143,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1753:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1752:18:15"
                  },
                  "scope": 3368,
                  "src": "1701:316:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3841
                  ],
                  "body": {
                    "id": 3171,
                    "nodeType": "Block",
                    "src": "2163:31:15",
                    "statements": [
                      {
                        "expression": {
                          "id": 3169,
                          "name": "chainId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3104,
                          "src": "2180:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3168,
                        "id": 3170,
                        "nodeType": "Return",
                        "src": "2173:14:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3163,
                    "nodeType": "StructuredDocumentation",
                    "src": "2023:66:15",
                    "text": "@dev Allows us to get the chainId that this factory has stored"
                  },
                  "functionSelector": "32a130c9",
                  "id": 3172,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getStoredChainId",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3165,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2136:8:15"
                  },
                  "parameters": {
                    "id": 3164,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2119:2:15"
                  },
                  "returnParameters": {
                    "id": 3168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3167,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3172,
                        "src": "2154:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2154:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2153:9:15"
                  },
                  "scope": 3368,
                  "src": "2094:100:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3846
                  ],
                  "body": {
                    "id": 3183,
                    "nodeType": "Block",
                    "src": "2455:57:15",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3180,
                              "name": "mastercopy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3102,
                              "src": "2494:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3179,
                            "name": "_getProxyCreationCode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3320,
                            "src": "2472:21:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address) pure returns (bytes memory)"
                            }
                          },
                          "id": 3181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2472:33:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3178,
                        "id": 3182,
                        "nodeType": "Return",
                        "src": "2465:40:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3173,
                    "nodeType": "StructuredDocumentation",
                    "src": "2200:138:15",
                    "text": "@dev Returns the proxy code used to both calculate the CREATE2 address and deploy the channel proxy pointed to the `ChannelMastercopy`"
                  },
                  "functionSelector": "15727e91",
                  "id": 3184,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getProxyCreationCode",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3175,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2411:8:15"
                  },
                  "parameters": {
                    "id": 3174,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2372:2:15"
                  },
                  "returnParameters": {
                    "id": 3178,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3177,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3184,
                        "src": "2437:12:15",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3176,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2437:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2436:14:15"
                  },
                  "scope": 3368,
                  "src": "2343:169:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3855
                  ],
                  "body": {
                    "id": 3204,
                    "nodeType": "Block",
                    "src": "2876:148:15",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3198,
                                  "name": "alice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3187,
                                  "src": "2958:5:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 3199,
                                  "name": "bob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3189,
                                  "src": "2965:3:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3197,
                                "name": "generateSalt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3367,
                                "src": "2945:12:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bytes32_$",
                                  "typeString": "function (address,address) view returns (bytes32)"
                                }
                              },
                              "id": 3200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2945:24:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 3201,
                              "name": "creationCodeHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3100,
                              "src": "2987:16:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 3195,
                              "name": "Create2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1466,
                              "src": "2905:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Create2_$1466_$",
                                "typeString": "type(library Create2)"
                              }
                            },
                            "id": 3196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "computeAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1429,
                            "src": "2905:22:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes32) view returns (address)"
                            }
                          },
                          "id": 3202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2905:112:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 3194,
                        "id": 3203,
                        "nodeType": "Return",
                        "src": "2886:131:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3185,
                    "nodeType": "StructuredDocumentation",
                    "src": "2518:221:15",
                    "text": "@dev Allows us to get the address for a new channel contract created via `createChannel`\n @param alice address of the igh fidelity channel participant\n @param bob address of the other channel participant"
                  },
                  "functionSelector": "e617aaac",
                  "id": 3205,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getChannelAddress",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3191,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2837:8:15"
                  },
                  "parameters": {
                    "id": 3190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3187,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3205,
                        "src": "2771:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3186,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2771:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3189,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3205,
                        "src": "2786:11:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3188,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2786:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2770:28:15"
                  },
                  "returnParameters": {
                    "id": 3194,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3193,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3205,
                        "src": "2863:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2863:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2862:9:15"
                  },
                  "scope": 3368,
                  "src": "2744:280:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3864
                  ],
                  "body": {
                    "id": 3235,
                    "nodeType": "Block",
                    "src": "3376:147:15",
                    "statements": [
                      {
                        "expression": {
                          "id": 3221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3216,
                            "name": "channel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3214,
                            "src": "3386:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3218,
                                "name": "alice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3208,
                                "src": "3415:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3219,
                                "name": "bob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3210,
                                "src": "3422:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3217,
                              "name": "deployChannelProxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3346,
                              "src": "3396:18:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                                "typeString": "function (address,address) returns (address)"
                              }
                            },
                            "id": 3220,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3396:30:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3386:40:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3222,
                        "nodeType": "ExpressionStatement",
                        "src": "3386:40:15"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3227,
                              "name": "alice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3208,
                              "src": "3466:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3228,
                              "name": "bob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3210,
                              "src": "3473:3:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3224,
                                  "name": "channel",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3214,
                                  "src": "3451:7:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3223,
                                "name": "IVectorChannel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4011,
                                "src": "3436:14:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IVectorChannel_$4011_$",
                                  "typeString": "type(contract IVectorChannel)"
                                }
                              },
                              "id": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3436:23:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IVectorChannel_$4011",
                                "typeString": "contract IVectorChannel"
                              }
                            },
                            "id": 3226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setup",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3742,
                            "src": "3436:29:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address) external"
                            }
                          },
                          "id": 3229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3436:41:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3230,
                        "nodeType": "ExpressionStatement",
                        "src": "3436:41:15"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3232,
                              "name": "channel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3214,
                              "src": "3508:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3231,
                            "name": "ChannelCreation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3826,
                            "src": "3492:15:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3233,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3492:24:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3234,
                        "nodeType": "EmitStatement",
                        "src": "3487:29:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3206,
                    "nodeType": "StructuredDocumentation",
                    "src": "3030:220:15",
                    "text": "@dev Allows us to create new channel contract and get it all set up in one transaction\n @param alice address of the high fidelity channel participant\n @param bob address of the other channel participant"
                  },
                  "functionSelector": "35a1ba6f",
                  "id": 3236,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createChannel",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3212,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3329:8:15"
                  },
                  "parameters": {
                    "id": 3211,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3208,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3236,
                        "src": "3278:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3207,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3278:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3210,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3236,
                        "src": "3293:11:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3209,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3293:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3277:28:15"
                  },
                  "returnParameters": {
                    "id": 3215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3214,
                        "mutability": "mutable",
                        "name": "channel",
                        "nodeType": "VariableDeclaration",
                        "scope": 3236,
                        "src": "3355:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3213,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3355:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3354:17:15"
                  },
                  "scope": 3368,
                  "src": "3255:268:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3877
                  ],
                  "body": {
                    "id": 3304,
                    "nodeType": "Block",
                    "src": "3865:875:15",
                    "statements": [
                      {
                        "expression": {
                          "id": 3256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3251,
                            "name": "channel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3249,
                            "src": "3875:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3253,
                                "name": "alice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3239,
                                "src": "3899:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3254,
                                "name": "bob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3241,
                                "src": "3906:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3252,
                              "name": "createChannel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3236,
                              "src": "3885:13:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                                "typeString": "function (address,address) returns (address)"
                              }
                            },
                            "id": 3255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3885:25:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3875:35:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3257,
                        "nodeType": "ExpressionStatement",
                        "src": "3875:35:15"
                      },
                      {
                        "condition": {
                          "id": 3262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4181:26:15",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 3260,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3243,
                                "src": "4199:7:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 3258,
                                "name": "LibAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4163,
                                "src": "4182:8:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_LibAsset_$4163_$",
                                  "typeString": "type(library LibAsset)"
                                }
                              },
                              "id": 3259,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isEther",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4060,
                              "src": "4182:16:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) pure returns (bool)"
                              }
                            },
                            "id": 3261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4182:25:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3292,
                        "nodeType": "IfStatement",
                        "src": "4177:476:15",
                        "trueBody": {
                          "id": 3291,
                          "nodeType": "Block",
                          "src": "4209:444:15",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 3266,
                                        "name": "assetId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3243,
                                        "src": "4291:7:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 3267,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -15,
                                          "src": "4320:3:15",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 3268,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "4320:10:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 3271,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -28,
                                            "src": "4360:4:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_ChannelFactory_$3368",
                                              "typeString": "contract ChannelFactory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_ChannelFactory_$3368",
                                              "typeString": "contract ChannelFactory"
                                            }
                                          ],
                                          "id": 3270,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "4352:7:15",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 3269,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "4352:7:15",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 3272,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4352:13:15",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 3273,
                                        "name": "amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3245,
                                        "src": "4387:6:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3264,
                                        "name": "LibERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4406,
                                        "src": "4248:8:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_LibERC20_$4406_$",
                                          "typeString": "type(library LibERC20)"
                                        }
                                      },
                                      "id": 3265,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "transferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4383,
                                      "src": "4248:21:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                        "typeString": "function (address,address,address,uint256) returns (bool)"
                                      }
                                    },
                                    "id": 3274,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4248:163:15",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "4368616e6e656c466163746f72793a2045524332305f5452414e534645525f4641494c4544",
                                    "id": 3275,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4429:39:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_9f652379d4e8f96cc9eedb4e5baae7aa45ef64eff184d28de716691573a20b30",
                                      "typeString": "literal_string \"ChannelFactory: ERC20_TRANSFER_FAILED\""
                                    },
                                    "value": "ChannelFactory: ERC20_TRANSFER_FAILED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_9f652379d4e8f96cc9eedb4e5baae7aa45ef64eff184d28de716691573a20b30",
                                      "typeString": "literal_string \"ChannelFactory: ERC20_TRANSFER_FAILED\""
                                    }
                                  ],
                                  "id": 3263,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "4223:7:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 3276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4223:259:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3277,
                              "nodeType": "ExpressionStatement",
                              "src": "4223:259:15"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 3281,
                                        "name": "assetId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3243,
                                        "src": "4538:7:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 3284,
                                            "name": "channel",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3249,
                                            "src": "4555:7:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3283,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "4547:7:15",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 3282,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "4547:7:15",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 3285,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4547:16:15",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 3286,
                                        "name": "amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3245,
                                        "src": "4565:6:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3279,
                                        "name": "LibERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4406,
                                        "src": "4521:8:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_LibERC20_$4406_$",
                                          "typeString": "type(library LibERC20)"
                                        }
                                      },
                                      "id": 3280,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "approve",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4358,
                                      "src": "4521:16:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                        "typeString": "function (address,address,uint256) returns (bool)"
                                      }
                                    },
                                    "id": 3287,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4521:51:15",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "4368616e6e656c466163746f72793a2045524332305f415050524f56455f4641494c4544",
                                    "id": 3288,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4590:38:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_967bfc0a4c145dce699913dcc007a65b9f5ae506976fecb0945de520ac85622c",
                                      "typeString": "literal_string \"ChannelFactory: ERC20_APPROVE_FAILED\""
                                    },
                                    "value": "ChannelFactory: ERC20_APPROVE_FAILED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_967bfc0a4c145dce699913dcc007a65b9f5ae506976fecb0945de520ac85622c",
                                      "typeString": "literal_string \"ChannelFactory: ERC20_APPROVE_FAILED\""
                                    }
                                  ],
                                  "id": 3278,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "4496:7:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 3289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4496:146:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3290,
                              "nodeType": "ExpressionStatement",
                              "src": "4496:146:15"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3300,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3243,
                              "src": "4717:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3301,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3245,
                              "src": "4726:6:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3294,
                                    "name": "channel",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3249,
                                    "src": "4677:7:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3293,
                                  "name": "IVectorChannel",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4011,
                                  "src": "4662:14:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IVectorChannel_$4011_$",
                                    "typeString": "type(contract IVectorChannel)"
                                  }
                                },
                                "id": 3295,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4662:23:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IVectorChannel_$4011",
                                  "typeString": "contract IVectorChannel"
                                }
                              },
                              "id": 3296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "depositAlice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3783,
                              "src": "4662:36:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,uint256) payable external"
                              }
                            },
                            "id": 3299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "expression": {
                                  "id": 3297,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "4706:3:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "4706:9:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "4662:54:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$value",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 3302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4662:71:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3303,
                        "nodeType": "ExpressionStatement",
                        "src": "4662:71:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3237,
                    "nodeType": "StructuredDocumentation",
                    "src": "3529:142:15",
                    "text": "@dev Allows us to create a new channel contract and fund it in one transaction\n @param bob address of the other channel participant"
                  },
                  "functionSelector": "fe454501",
                  "id": 3305,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createChannelAndDepositAlice",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3247,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3830:8:15"
                  },
                  "parameters": {
                    "id": 3246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3239,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3305,
                        "src": "3723:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3238,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3723:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3241,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3305,
                        "src": "3746:11:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3240,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3746:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3243,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3305,
                        "src": "3767:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3242,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3767:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3245,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3305,
                        "src": "3792:14:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3244,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3792:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3713:99:15"
                  },
                  "returnParameters": {
                    "id": 3250,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3249,
                        "mutability": "mutable",
                        "name": "channel",
                        "nodeType": "VariableDeclaration",
                        "scope": 3305,
                        "src": "3848:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3848:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3847:17:15"
                  },
                  "scope": 3368,
                  "src": "3676:1064:15",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3319,
                    "nodeType": "Block",
                    "src": "4905:163:15",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3314,
                              "name": "proxyCreationCodePrefix",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3095,
                              "src": "4954:23:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 3315,
                              "name": "_mastercopy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3307,
                              "src": "4995:11:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3316,
                              "name": "proxyCreationCodeSuffix",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3098,
                              "src": "5024:23:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 3312,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "4920:3:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 3313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "4920:16:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 3317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4920:141:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3311,
                        "id": 3318,
                        "nodeType": "Return",
                        "src": "4913:148:15"
                      }
                    ]
                  },
                  "id": 3320,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getProxyCreationCode",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3308,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3307,
                        "mutability": "mutable",
                        "name": "_mastercopy",
                        "nodeType": "VariableDeclaration",
                        "scope": 3320,
                        "src": "4847:19:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3306,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4847:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4846:21:15"
                  },
                  "returnParameters": {
                    "id": 3311,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3310,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3320,
                        "src": "4891:12:15",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3309,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4891:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4890:14:15"
                  },
                  "scope": 3368,
                  "src": "4816:252:15",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3345,
                    "nodeType": "Block",
                    "src": "5381:120:15",
                    "statements": [
                      {
                        "assignments": [
                          3331
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3331,
                            "mutability": "mutable",
                            "name": "salt",
                            "nodeType": "VariableDeclaration",
                            "scope": 3345,
                            "src": "5391:12:15",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 3330,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "5391:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3336,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3333,
                              "name": "alice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3323,
                              "src": "5419:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3334,
                              "name": "bob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3325,
                              "src": "5426:3:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3332,
                            "name": "generateSalt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3367,
                            "src": "5406:12:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address,address) view returns (bytes32)"
                            }
                          },
                          "id": 3335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5406:24:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5391:39:15"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 3339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5462:1:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 3340,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3331,
                              "src": "5465:4:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 3341,
                                "name": "getProxyCreationCode",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3184,
                                "src": "5471:20:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () view returns (bytes memory)"
                                }
                              },
                              "id": 3342,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5471:22:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 3337,
                              "name": "Create2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1466,
                              "src": "5447:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Create2_$1466_$",
                                "typeString": "type(library Create2)"
                              }
                            },
                            "id": 3338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deploy",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1409,
                            "src": "5447:14:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (uint256,bytes32,bytes memory) returns (address)"
                            }
                          },
                          "id": 3343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5447:47:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 3329,
                        "id": 3344,
                        "nodeType": "Return",
                        "src": "5440:54:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3321,
                    "nodeType": "StructuredDocumentation",
                    "src": "5074:199:15",
                    "text": "@dev Allows us to create new channel contact using CREATE2\n @param alice address of the high fidelity participant in the channel\n @param bob address of the other channel participant"
                  },
                  "id": 3346,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deployChannelProxy",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3323,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3346,
                        "src": "5306:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3322,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5306:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3325,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3346,
                        "src": "5321:11:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5321:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5305:28:15"
                  },
                  "returnParameters": {
                    "id": 3329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3328,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3346,
                        "src": "5368:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3327,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5368:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5367:9:15"
                  },
                  "scope": 3368,
                  "src": "5278:223:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3366,
                    "nodeType": "Block",
                    "src": "5713:77:15",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3359,
                                  "name": "alice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3349,
                                  "src": "5757:5:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 3360,
                                  "name": "bob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3351,
                                  "src": "5764:3:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 3361,
                                    "name": "getChainId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3162,
                                    "src": "5769:10:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 3362,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5769:12:15",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 3357,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "5740:3:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3358,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "5740:16:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 3363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5740:42:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3356,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "5730:9:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5730:53:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 3355,
                        "id": 3365,
                        "nodeType": "Return",
                        "src": "5723:60:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3347,
                    "nodeType": "StructuredDocumentation",
                    "src": "5507:91:15",
                    "text": "@dev Generates the unique salt for calculating the CREATE2 address of the channel proxy"
                  },
                  "id": 3367,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "generateSalt",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3349,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3367,
                        "src": "5625:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3348,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5625:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3351,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3367,
                        "src": "5640:11:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3350,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5640:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5624:28:15"
                  },
                  "returnParameters": {
                    "id": 3355,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3354,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3367,
                        "src": "5700:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3353,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5700:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5699:9:15"
                  },
                  "scope": 3368,
                  "src": "5603:187:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3369,
              "src": "428:5364:15"
            }
          ],
          "src": "39:5754:15"
        },
        "id": 15
      },
      "src.sol/ChannelMastercopy.sol": {
        "ast": {
          "absolutePath": "src.sol/ChannelMastercopy.sol",
          "exportedSymbols": {
            "ChannelMastercopy": [
              3391
            ]
          },
          "id": 3392,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3370,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:16"
            },
            {
              "id": 3371,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:16"
            },
            {
              "absolutePath": "src.sol/interfaces/IVectorChannel.sol",
              "file": "./interfaces/IVectorChannel.sol",
              "id": 3372,
              "nodeType": "ImportDirective",
              "scope": 3392,
              "sourceUnit": 4012,
              "src": "98:41:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCCore.sol",
              "file": "./CMCCore.sol",
              "id": 3373,
              "nodeType": "ImportDirective",
              "scope": 3392,
              "sourceUnit": 2714,
              "src": "140:23:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCAsset.sol",
              "file": "./CMCAsset.sol",
              "id": 3374,
              "nodeType": "ImportDirective",
              "scope": 3392,
              "sourceUnit": 2584,
              "src": "164:24:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCDeposit.sol",
              "file": "./CMCDeposit.sol",
              "id": 3375,
              "nodeType": "ImportDirective",
              "scope": 3392,
              "sourceUnit": 2871,
              "src": "189:26:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCWithdraw.sol",
              "file": "./CMCWithdraw.sol",
              "id": 3376,
              "nodeType": "ImportDirective",
              "scope": 3392,
              "sourceUnit": 3082,
              "src": "216:27:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/CMCAdjudicator.sol",
              "file": "./CMCAdjudicator.sol",
              "id": 3377,
              "nodeType": "ImportDirective",
              "scope": 3392,
              "sourceUnit": 2323,
              "src": "244:30:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3379,
                    "name": "CMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2713,
                    "src": "669:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCCore_$2713",
                      "typeString": "contract CMCCore"
                    }
                  },
                  "id": 3380,
                  "nodeType": "InheritanceSpecifier",
                  "src": "669:7:16"
                },
                {
                  "baseName": {
                    "id": 3381,
                    "name": "CMCAsset",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2583,
                    "src": "682:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCAsset_$2583",
                      "typeString": "contract CMCAsset"
                    }
                  },
                  "id": 3382,
                  "nodeType": "InheritanceSpecifier",
                  "src": "682:8:16"
                },
                {
                  "baseName": {
                    "id": 3383,
                    "name": "CMCDeposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2870,
                    "src": "696:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCDeposit_$2870",
                      "typeString": "contract CMCDeposit"
                    }
                  },
                  "id": 3384,
                  "nodeType": "InheritanceSpecifier",
                  "src": "696:10:16"
                },
                {
                  "baseName": {
                    "id": 3385,
                    "name": "CMCWithdraw",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3081,
                    "src": "712:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCWithdraw_$3081",
                      "typeString": "contract CMCWithdraw"
                    }
                  },
                  "id": 3386,
                  "nodeType": "InheritanceSpecifier",
                  "src": "712:11:16"
                },
                {
                  "baseName": {
                    "id": 3387,
                    "name": "CMCAdjudicator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2322,
                    "src": "729:14:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CMCAdjudicator_$2322",
                      "typeString": "contract CMCAdjudicator"
                    }
                  },
                  "id": 3388,
                  "nodeType": "InheritanceSpecifier",
                  "src": "729:14:16"
                },
                {
                  "baseName": {
                    "id": 3389,
                    "name": "IVectorChannel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4011,
                    "src": "749:14:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IVectorChannel_$4011",
                      "typeString": "contract IVectorChannel"
                    }
                  },
                  "id": 3390,
                  "nodeType": "InheritanceSpecifier",
                  "src": "749:14:16"
                }
              ],
              "contractDependencies": [
                2322,
                2583,
                2713,
                2870,
                3081,
                3442,
                3703,
                3732,
                3753,
                3784,
                3819,
                4011
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3378,
                "nodeType": "StructuredDocumentation",
                "src": "276:359:16",
                "text": "@title ChannelMastercopy\n @author Connext <support@connext.network>\n @notice Contains the logic used by all Vector multisigs. A proxy to this\n         contract is deployed per-channel using the ChannelFactory.sol.\n         Supports channel adjudication logic, deposit logic, and arbitrary\n         calls when a commitment is double-signed."
              },
              "fullyImplemented": true,
              "id": 3391,
              "linearizedBaseContracts": [
                3391,
                4011,
                2322,
                3703,
                3081,
                3819,
                2870,
                3784,
                2583,
                3732,
                2713,
                3753,
                3442
              ],
              "name": "ChannelMastercopy",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 3392,
              "src": "635:133:16"
            }
          ],
          "src": "39:730:16"
        },
        "id": 16
      },
      "src.sol/ReentrancyGuard.sol": {
        "ast": {
          "absolutePath": "src.sol/ReentrancyGuard.sol",
          "exportedSymbols": {
            "ReentrancyGuard": [
              3442
            ]
          },
          "id": 3443,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3393,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:17"
            },
            {
              "id": 3394,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:17"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3395,
                "nodeType": "StructuredDocumentation",
                "src": "98:145:17",
                "text": "@title CMCWithdraw\n @author Connext <support@connext.network>\n @notice A \"mutex\" reentrancy guard, heavily influenced by OpenZeppelin."
              },
              "fullyImplemented": true,
              "id": 3442,
              "linearizedBaseContracts": [
                3442
              ],
              "name": "ReentrancyGuard",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 3398,
                  "mutability": "constant",
                  "name": "OPEN",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "275:33:17",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3396,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "275:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 3397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "307:1:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 3401,
                  "mutability": "constant",
                  "name": "LOCKED",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "314:35:17",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3399,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "314:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "32",
                    "id": 3400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "348:1:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "functionSelector": "f83d08ba",
                  "id": 3403,
                  "mutability": "mutable",
                  "name": "lock",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "356:19:17",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "356:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3410,
                    "nodeType": "Block",
                    "src": "408:28:17",
                    "statements": [
                      {
                        "expression": {
                          "id": 3408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3406,
                            "name": "lock",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3403,
                            "src": "418:4:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3407,
                            "name": "OPEN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3398,
                            "src": "425:4:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "418:11:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3409,
                        "nodeType": "ExpressionStatement",
                        "src": "418:11:17"
                      }
                    ]
                  },
                  "id": 3411,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setup",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3404,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "396:2:17"
                  },
                  "returnParameters": {
                    "id": 3405,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "408:0:17"
                  },
                  "scope": 3442,
                  "src": "382:54:17",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3429,
                    "nodeType": "Block",
                    "src": "466:128:17",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3414,
                                "name": "lock",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3403,
                                "src": "484:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 3415,
                                "name": "OPEN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3398,
                                "src": "492:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "484:12:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5265656e7472616e637947756172643a205245454e5452414e545f43414c4c",
                              "id": 3417,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "498:33:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_982d5e3dd9423c1f6b4d88d7cda0b2d264980531d517f456c68fb4aec31599f5",
                                "typeString": "literal_string \"ReentrancyGuard: REENTRANT_CALL\""
                              },
                              "value": "ReentrancyGuard: REENTRANT_CALL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_982d5e3dd9423c1f6b4d88d7cda0b2d264980531d517f456c68fb4aec31599f5",
                                "typeString": "literal_string \"ReentrancyGuard: REENTRANT_CALL\""
                              }
                            ],
                            "id": 3413,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "476:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "476:56:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3419,
                        "nodeType": "ExpressionStatement",
                        "src": "476:56:17"
                      },
                      {
                        "expression": {
                          "id": 3422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3420,
                            "name": "lock",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3403,
                            "src": "542:4:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3421,
                            "name": "LOCKED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3401,
                            "src": "549:6:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "542:13:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3423,
                        "nodeType": "ExpressionStatement",
                        "src": "542:13:17"
                      },
                      {
                        "id": 3424,
                        "nodeType": "PlaceholderStatement",
                        "src": "565:1:17"
                      },
                      {
                        "expression": {
                          "id": 3427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3425,
                            "name": "lock",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3403,
                            "src": "576:4:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3426,
                            "name": "OPEN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3398,
                            "src": "583:4:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "576:11:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3428,
                        "nodeType": "ExpressionStatement",
                        "src": "576:11:17"
                      }
                    ]
                  },
                  "id": 3430,
                  "name": "nonReentrant",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 3412,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "463:2:17"
                  },
                  "src": "442:152:17",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3440,
                    "nodeType": "Block",
                    "src": "628:84:17",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3433,
                                "name": "lock",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3403,
                                "src": "646:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 3434,
                                "name": "OPEN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3398,
                                "src": "654:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "646:12:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5265656e7472616e637947756172643a205245454e5452414e545f43414c4c",
                              "id": 3436,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "660:33:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_982d5e3dd9423c1f6b4d88d7cda0b2d264980531d517f456c68fb4aec31599f5",
                                "typeString": "literal_string \"ReentrancyGuard: REENTRANT_CALL\""
                              },
                              "value": "ReentrancyGuard: REENTRANT_CALL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_982d5e3dd9423c1f6b4d88d7cda0b2d264980531d517f456c68fb4aec31599f5",
                                "typeString": "literal_string \"ReentrancyGuard: REENTRANT_CALL\""
                              }
                            ],
                            "id": 3432,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "638:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "638:56:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3438,
                        "nodeType": "ExpressionStatement",
                        "src": "638:56:17"
                      },
                      {
                        "id": 3439,
                        "nodeType": "PlaceholderStatement",
                        "src": "704:1:17"
                      }
                    ]
                  },
                  "id": 3441,
                  "name": "nonReentrantView",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 3431,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "625:2:17"
                  },
                  "src": "600:112:17",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3443,
              "src": "244:470:17"
            }
          ],
          "src": "39:676:17"
        },
        "id": 17
      },
      "src.sol/TransferRegistry.sol": {
        "ast": {
          "absolutePath": "src.sol/TransferRegistry.sol",
          "exportedSymbols": {
            "TransferRegistry": [
              3528
            ]
          },
          "id": 3529,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3444,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:18"
            },
            {
              "id": 3445,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:18"
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferRegistry.sol",
              "file": "./interfaces/ITransferRegistry.sol",
              "id": 3446,
              "nodeType": "ImportDirective",
              "scope": 3529,
              "sourceUnit": 3993,
              "src": "98:44:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibIterableMapping.sol",
              "file": "./lib/LibIterableMapping.sol",
              "id": 3447,
              "nodeType": "ImportDirective",
              "scope": 3529,
              "sourceUnit": 4736,
              "src": "143:38:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
              "file": "@openzeppelin/contracts/access/Ownable.sol",
              "id": 3448,
              "nodeType": "ImportDirective",
              "scope": 3529,
              "sourceUnit": 132,
              "src": "182:52:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3450,
                    "name": "Ownable",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 131,
                    "src": "742:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Ownable_$131",
                      "typeString": "contract Ownable"
                    }
                  },
                  "id": 3451,
                  "nodeType": "InheritanceSpecifier",
                  "src": "742:7:18"
                },
                {
                  "baseName": {
                    "id": 3452,
                    "name": "ITransferRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3992,
                    "src": "751:17:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITransferRegistry_$3992",
                      "typeString": "contract ITransferRegistry"
                    }
                  },
                  "id": 3453,
                  "nodeType": "InheritanceSpecifier",
                  "src": "751:17:18"
                }
              ],
              "contractDependencies": [
                22,
                131,
                3992
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3449,
                "nodeType": "StructuredDocumentation",
                "src": "236:476:18",
                "text": "@title TransferRegistry\n @author Connext <support@connext.network>\n @notice The TransferRegistry maintains an onchain record of all\n         supported transfers (specifically holds the registry information\n         defined within the contracts). The offchain protocol uses\n         this information to get the correct encodings when generating\n         signatures. The information stored here can only be updated\n         by the owner of the contract"
              },
              "fullyImplemented": true,
              "id": 3528,
              "linearizedBaseContracts": [
                3528,
                3992,
                131,
                22
              ],
              "name": "TransferRegistry",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3456,
                  "libraryName": {
                    "id": 3454,
                    "name": "LibIterableMapping",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4735,
                    "src": "781:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibIterableMapping_$4735",
                      "typeString": "library LibIterableMapping"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "775:64:18",
                  "typeName": {
                    "id": 3455,
                    "name": "LibIterableMapping.IterableMapping",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4424,
                    "src": "804:34:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                      "typeString": "struct LibIterableMapping.IterableMapping"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 3458,
                  "mutability": "mutable",
                  "name": "transfers",
                  "nodeType": "VariableDeclaration",
                  "scope": 3528,
                  "src": "845:44:18",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                    "typeString": "struct LibIterableMapping.IterableMapping"
                  },
                  "typeName": {
                    "id": 3457,
                    "name": "LibIterableMapping.IterableMapping",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4424,
                    "src": "845:34:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                      "typeString": "struct LibIterableMapping.IterableMapping"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3980
                  ],
                  "body": {
                    "id": 3486,
                    "nodeType": "Block",
                    "src": "1083:289:18",
                    "statements": [
                      {
                        "assignments": [
                          3468
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3468,
                            "mutability": "mutable",
                            "name": "idx",
                            "nodeType": "VariableDeclaration",
                            "scope": 3486,
                            "src": "1140:11:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3467,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1140:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3472,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3469,
                              "name": "transfers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3458,
                              "src": "1154:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            "id": 3470,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4506,
                            "src": "1154:16:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_IterableMapping_$4424_storage_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 3471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1154:18:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1140:32:18"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3476,
                              "name": "definition",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3461,
                              "src": "1258:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            ],
                            "expression": {
                              "id": 3473,
                              "name": "transfers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3458,
                              "src": "1226:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            "id": 3475,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addTransferDefinition",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4661,
                            "src": "1226:31:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$returns$__$bound_to$_t_struct$_IterableMapping_$4424_storage_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 3477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1226:43:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3478,
                        "nodeType": "ExpressionStatement",
                        "src": "1226:43:18"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3482,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3468,
                                  "src": "1360:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 3480,
                                  "name": "transfers",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3458,
                                  "src": "1321:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                                  }
                                },
                                "id": 3481,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getTransferDefinitionByIndex",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4558,
                                "src": "1321:38:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_uint256_$returns$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$bound_to$_t_struct$_IterableMapping_$4424_storage_ptr_$",
                                  "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,uint256) view returns (struct RegisteredTransfer memory)"
                                }
                              },
                              "id": 3483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1321:43:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            ],
                            "id": 3479,
                            "name": "TransferAdded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3971,
                            "src": "1307:13:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$returns$__$",
                              "typeString": "function (struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 3484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1307:58:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3485,
                        "nodeType": "EmitStatement",
                        "src": "1302:63:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3459,
                    "nodeType": "StructuredDocumentation",
                    "src": "896:57:18",
                    "text": "@dev Should add a transfer definition to the registry"
                  },
                  "functionSelector": "55304c3f",
                  "id": 3487,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3465,
                      "modifierName": {
                        "id": 3464,
                        "name": "onlyOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "1069:9:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1069:9:18"
                    }
                  ],
                  "name": "addTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3463,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1052:8:18"
                  },
                  "parameters": {
                    "id": 3462,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3461,
                        "mutability": "mutable",
                        "name": "definition",
                        "nodeType": "VariableDeclaration",
                        "scope": 3487,
                        "src": "989:36:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 3460,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "989:18:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "988:38:18"
                  },
                  "returnParameters": {
                    "id": 3466,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1083:0:18"
                  },
                  "scope": 3528,
                  "src": "958:414:18",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3985
                  ],
                  "body": {
                    "id": 3513,
                    "nodeType": "Block",
                    "src": "1555:295:18",
                    "statements": [
                      {
                        "assignments": [
                          3497
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3497,
                            "mutability": "mutable",
                            "name": "transfer",
                            "nodeType": "VariableDeclaration",
                            "scope": 3513,
                            "src": "1622:34:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                              "typeString": "struct RegisteredTransfer"
                            },
                            "typeName": {
                              "id": 3496,
                              "name": "RegisteredTransfer",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3967,
                              "src": "1622:18:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                                "typeString": "struct RegisteredTransfer"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3502,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3500,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3490,
                              "src": "1697:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 3498,
                              "name": "transfers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3458,
                              "src": "1659:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            "id": 3499,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTransferDefinitionByName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4530,
                            "src": "1659:37:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$bound_to$_t_struct$_IterableMapping_$4424_storage_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory) view returns (struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 3501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1659:43:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1622:80:18"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3506,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3490,
                              "src": "1775:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 3503,
                              "name": "transfers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3458,
                              "src": "1740:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            "id": 3505,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "removeTransferDefinition",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4734,
                            "src": "1740:34:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$__$bound_to$_t_struct$_IterableMapping_$4424_storage_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory)"
                            }
                          },
                          "id": 3507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1740:40:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3508,
                        "nodeType": "ExpressionStatement",
                        "src": "1740:40:18"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3510,
                              "name": "transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3497,
                              "src": "1834:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            ],
                            "id": 3509,
                            "name": "TransferRemoved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3975,
                            "src": "1818:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$returns$__$",
                              "typeString": "function (struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 3511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1818:25:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3512,
                        "nodeType": "EmitStatement",
                        "src": "1813:30:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3488,
                    "nodeType": "StructuredDocumentation",
                    "src": "1378:62:18",
                    "text": "@dev Should remove a transfer definition from the registry"
                  },
                  "functionSelector": "961bf9b1",
                  "id": 3514,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3494,
                      "modifierName": {
                        "id": 3493,
                        "name": "onlyOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 80,
                        "src": "1541:9:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1541:9:18"
                    }
                  ],
                  "name": "removeTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3492,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1524:8:18"
                  },
                  "parameters": {
                    "id": 3491,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3490,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 3514,
                        "src": "1479:18:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3489,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1479:6:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1478:20:18"
                  },
                  "returnParameters": {
                    "id": 3495,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1555:0:18"
                  },
                  "scope": 3528,
                  "src": "1445:405:18",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3991
                  ],
                  "body": {
                    "id": 3526,
                    "nodeType": "Block",
                    "src": "2050:58:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 3522,
                              "name": "transfers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3458,
                              "src": "2067:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            "id": 3523,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTransferDefinitions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4610,
                            "src": "2067:32:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$returns$_t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_IterableMapping_$4424_storage_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer) view returns (struct RegisteredTransfer memory[] memory)"
                            }
                          },
                          "id": 3524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2067:34:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory[] memory"
                          }
                        },
                        "functionReturnParameters": 3521,
                        "id": 3525,
                        "nodeType": "Return",
                        "src": "2060:41:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3515,
                    "nodeType": "StructuredDocumentation",
                    "src": "1856:58:18",
                    "text": "@dev Should return all transfer defintions in registry"
                  },
                  "functionSelector": "c9ff4d25",
                  "id": 3527,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitions",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3517,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1991:8:18"
                  },
                  "parameters": {
                    "id": 3516,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1950:2:18"
                  },
                  "returnParameters": {
                    "id": 3521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3520,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3527,
                        "src": "2017:27:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct RegisteredTransfer[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3518,
                            "name": "RegisteredTransfer",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3967,
                            "src": "2017:18:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                              "typeString": "struct RegisteredTransfer"
                            }
                          },
                          "id": 3519,
                          "nodeType": "ArrayTypeName",
                          "src": "2017:20:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_storage_$dyn_storage_ptr",
                            "typeString": "struct RegisteredTransfer[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2016:29:18"
                  },
                  "scope": 3528,
                  "src": "1919:189:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3529,
              "src": "713:1397:18"
            }
          ],
          "src": "39:2072:18"
        },
        "id": 18
      },
      "src.sol/interfaces/Commitment.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/Commitment.sol",
          "exportedSymbols": {
            "CommitmentType": [
              3534
            ]
          },
          "id": 3535,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3530,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:19"
            },
            {
              "id": 3531,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:19"
            },
            {
              "canonicalName": "CommitmentType",
              "id": 3534,
              "members": [
                {
                  "id": 3532,
                  "name": "ChannelState",
                  "nodeType": "EnumValue",
                  "src": "119:12:19"
                },
                {
                  "id": 3533,
                  "name": "WithdrawData",
                  "nodeType": "EnumValue",
                  "src": "133:12:19"
                }
              ],
              "name": "CommitmentType",
              "nodeType": "EnumDefinition",
              "src": "98:48:19"
            }
          ],
          "src": "39:108:19"
        },
        "id": 19
      },
      "src.sol/interfaces/ICMCAdjudicator.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ICMCAdjudicator.sol",
          "exportedSymbols": {
            "ICMCAdjudicator": [
              3703
            ]
          },
          "id": 3704,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3536,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:20"
            },
            {
              "id": 3537,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:20"
            },
            {
              "absolutePath": "src.sol/interfaces/Types.sol",
              "file": "./Types.sol",
              "id": 3538,
              "nodeType": "ImportDirective",
              "scope": 3704,
              "sourceUnit": 4024,
              "src": "98:21:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3703,
              "linearizedBaseContracts": [
                3703
              ],
              "name": "ICMCAdjudicator",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ICMCAdjudicator.CoreChannelState",
                  "id": 3566,
                  "members": [
                    {
                      "constant": false,
                      "id": 3540,
                      "mutability": "mutable",
                      "name": "channelAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "187:22:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3539,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "187:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3542,
                      "mutability": "mutable",
                      "name": "alice",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "219:13:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3541,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "219:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3544,
                      "mutability": "mutable",
                      "name": "bob",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "242:11:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3543,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "242:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3547,
                      "mutability": "mutable",
                      "name": "assetIds",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "263:18:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3545,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "263:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3546,
                        "nodeType": "ArrayTypeName",
                        "src": "263:9:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3550,
                      "mutability": "mutable",
                      "name": "balances",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "291:18:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Balance_$4023_storage_$dyn_storage_ptr",
                        "typeString": "struct Balance[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3548,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "291:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "id": 3549,
                        "nodeType": "ArrayTypeName",
                        "src": "291:9:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Balance_$4023_storage_$dyn_storage_ptr",
                          "typeString": "struct Balance[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3553,
                      "mutability": "mutable",
                      "name": "processedDepositsA",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "319:28:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3551,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "319:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3552,
                        "nodeType": "ArrayTypeName",
                        "src": "319:9:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3556,
                      "mutability": "mutable",
                      "name": "processedDepositsB",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "357:28:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "357:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3555,
                        "nodeType": "ArrayTypeName",
                        "src": "357:9:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3559,
                      "mutability": "mutable",
                      "name": "defundNonces",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "395:22:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3557,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "395:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3558,
                        "nodeType": "ArrayTypeName",
                        "src": "395:9:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3561,
                      "mutability": "mutable",
                      "name": "timeout",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "427:15:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3560,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "427:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3563,
                      "mutability": "mutable",
                      "name": "nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "452:13:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3562,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "452:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3565,
                      "mutability": "mutable",
                      "name": "merkleRoot",
                      "nodeType": "VariableDeclaration",
                      "scope": 3566,
                      "src": "475:18:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3564,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "475:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "CoreChannelState",
                  "nodeType": "StructDefinition",
                  "scope": 3703,
                  "src": "153:347:20",
                  "visibility": "public"
                },
                {
                  "canonicalName": "ICMCAdjudicator.CoreTransferState",
                  "id": 3585,
                  "members": [
                    {
                      "constant": false,
                      "id": 3568,
                      "mutability": "mutable",
                      "name": "channelAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "541:22:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3567,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "541:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3570,
                      "mutability": "mutable",
                      "name": "transferId",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "573:18:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3569,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "573:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3572,
                      "mutability": "mutable",
                      "name": "transferDefinition",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "601:26:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3571,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "601:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3574,
                      "mutability": "mutable",
                      "name": "initiator",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "637:17:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3573,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "637:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3576,
                      "mutability": "mutable",
                      "name": "responder",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "664:17:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3575,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "664:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3578,
                      "mutability": "mutable",
                      "name": "assetId",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "691:15:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3577,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "691:7:20",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3580,
                      "mutability": "mutable",
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "716:15:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                        "typeString": "struct Balance"
                      },
                      "typeName": {
                        "id": 3579,
                        "name": "Balance",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4023,
                        "src": "716:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                          "typeString": "struct Balance"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3582,
                      "mutability": "mutable",
                      "name": "transferTimeout",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "741:23:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3581,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "741:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3584,
                      "mutability": "mutable",
                      "name": "initialStateHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3585,
                      "src": "774:24:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3583,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "774:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "CoreTransferState",
                  "nodeType": "StructDefinition",
                  "scope": 3703,
                  "src": "506:299:20",
                  "visibility": "public"
                },
                {
                  "canonicalName": "ICMCAdjudicator.ChannelDispute",
                  "id": 3596,
                  "members": [
                    {
                      "constant": false,
                      "id": 3587,
                      "mutability": "mutable",
                      "name": "channelStateHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3596,
                      "src": "843:24:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3586,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "843:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3589,
                      "mutability": "mutable",
                      "name": "nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 3596,
                      "src": "877:13:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3588,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "877:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3591,
                      "mutability": "mutable",
                      "name": "merkleRoot",
                      "nodeType": "VariableDeclaration",
                      "scope": 3596,
                      "src": "900:18:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3590,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "900:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3593,
                      "mutability": "mutable",
                      "name": "consensusExpiry",
                      "nodeType": "VariableDeclaration",
                      "scope": 3596,
                      "src": "928:23:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3592,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "928:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3595,
                      "mutability": "mutable",
                      "name": "defundExpiry",
                      "nodeType": "VariableDeclaration",
                      "scope": 3596,
                      "src": "961:20:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3594,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "961:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ChannelDispute",
                  "nodeType": "StructDefinition",
                  "scope": 3703,
                  "src": "811:177:20",
                  "visibility": "public"
                },
                {
                  "canonicalName": "ICMCAdjudicator.TransferDispute",
                  "id": 3603,
                  "members": [
                    {
                      "constant": false,
                      "id": 3598,
                      "mutability": "mutable",
                      "name": "transferStateHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "1027:25:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3597,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1027:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3600,
                      "mutability": "mutable",
                      "name": "transferDisputeExpiry",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "1062:29:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3599,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1062:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3602,
                      "mutability": "mutable",
                      "name": "isDefunded",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "1101:15:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3601,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1101:4:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TransferDispute",
                  "nodeType": "StructDefinition",
                  "scope": 3703,
                  "src": "994:129:20",
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "id": 3611,
                  "name": "ChannelDisputed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3610,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3605,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "disputer",
                        "nodeType": "VariableDeclaration",
                        "scope": 3611,
                        "src": "1160:16:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3604,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1160:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3607,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "scope": 3611,
                        "src": "1186:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 3606,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "1186:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3609,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "dispute",
                        "nodeType": "VariableDeclaration",
                        "scope": 3611,
                        "src": "1218:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ChannelDispute_$3596_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.ChannelDispute"
                        },
                        "typeName": {
                          "id": 3608,
                          "name": "ChannelDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3596,
                          "src": "1218:14:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.ChannelDispute"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1150:96:20"
                  },
                  "src": "1129:118:20"
                },
                {
                  "anonymous": false,
                  "id": 3622,
                  "name": "ChannelDefunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3621,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3613,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defunder",
                        "nodeType": "VariableDeclaration",
                        "scope": 3622,
                        "src": "1284:16:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3612,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1284:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3615,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "scope": 3622,
                        "src": "1310:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 3614,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "1310:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3617,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "dispute",
                        "nodeType": "VariableDeclaration",
                        "scope": 3622,
                        "src": "1342:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ChannelDispute_$3596_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.ChannelDispute"
                        },
                        "typeName": {
                          "id": 3616,
                          "name": "ChannelDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3596,
                          "src": "1342:14:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.ChannelDispute"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3620,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "assetIds",
                        "nodeType": "VariableDeclaration",
                        "scope": 3622,
                        "src": "1374:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3618,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1374:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3619,
                          "nodeType": "ArrayTypeName",
                          "src": "1374:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1274:124:20"
                  },
                  "src": "1253:146:20"
                },
                {
                  "anonymous": false,
                  "id": 3630,
                  "name": "TransferDisputed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3629,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3624,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "disputer",
                        "nodeType": "VariableDeclaration",
                        "scope": 3630,
                        "src": "1437:16:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3623,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1437:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3626,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "scope": 3630,
                        "src": "1463:23:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 3625,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "1463:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3628,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "dispute",
                        "nodeType": "VariableDeclaration",
                        "scope": 3630,
                        "src": "1496:23:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TransferDispute_$3603_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.TransferDispute"
                        },
                        "typeName": {
                          "id": 3627,
                          "name": "TransferDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3603,
                          "src": "1496:15:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.TransferDispute"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1427:98:20"
                  },
                  "src": "1405:121:20"
                },
                {
                  "anonymous": false,
                  "id": 3644,
                  "name": "TransferDefunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3632,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defunder",
                        "nodeType": "VariableDeclaration",
                        "scope": 3644,
                        "src": "1564:16:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3631,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1564:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3634,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "scope": 3644,
                        "src": "1590:23:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 3633,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "1590:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3636,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "dispute",
                        "nodeType": "VariableDeclaration",
                        "scope": 3644,
                        "src": "1623:23:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TransferDispute_$3603_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.TransferDispute"
                        },
                        "typeName": {
                          "id": 3635,
                          "name": "TransferDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3603,
                          "src": "1623:15:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.TransferDispute"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3638,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "encodedInitialState",
                        "nodeType": "VariableDeclaration",
                        "scope": 3644,
                        "src": "1656:25:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3637,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1656:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3640,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "encodedResolver",
                        "nodeType": "VariableDeclaration",
                        "scope": 3644,
                        "src": "1691:21:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3639,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1691:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3642,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "scope": 3644,
                        "src": "1722:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 3641,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "1722:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1554:189:20"
                  },
                  "src": "1532:212:20"
                },
                {
                  "functionSelector": "f19eb10e",
                  "id": 3649,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getChannelDispute",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3645,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1776:2:20"
                  },
                  "returnParameters": {
                    "id": 3648,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3647,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3649,
                        "src": "1802:21:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ChannelDispute_$3596_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.ChannelDispute"
                        },
                        "typeName": {
                          "id": 3646,
                          "name": "ChannelDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3596,
                          "src": "1802:14:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ChannelDispute_$3596_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.ChannelDispute"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1801:23:20"
                  },
                  "scope": 3703,
                  "src": "1750:75:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e7283a8d",
                  "id": 3656,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getDefundNonce",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3651,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3656,
                        "src": "1855:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3650,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1855:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1854:17:20"
                  },
                  "returnParameters": {
                    "id": 3655,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3654,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3656,
                        "src": "1895:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3653,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1895:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1894:9:20"
                  },
                  "scope": 3703,
                  "src": "1831:73:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3ff0da16",
                  "id": 3663,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDispute",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3659,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3658,
                        "mutability": "mutable",
                        "name": "transferId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3663,
                        "src": "1938:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3657,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1938:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1937:20:20"
                  },
                  "returnParameters": {
                    "id": 3662,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3661,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3663,
                        "src": "2005:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TransferDispute_$3603_memory_ptr",
                          "typeString": "struct ICMCAdjudicator.TransferDispute"
                        },
                        "typeName": {
                          "id": 3660,
                          "name": "TransferDispute",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3603,
                          "src": "2005:15:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDispute_$3603_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.TransferDispute"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2004:24:20"
                  },
                  "scope": 3703,
                  "src": "1910:119:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c60939be",
                  "id": 3672,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "disputeChannel",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3670,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3665,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 3672,
                        "src": "2068:29:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 3664,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "2068:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3667,
                        "mutability": "mutable",
                        "name": "aliceSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3672,
                        "src": "2107:29:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3666,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2107:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3669,
                        "mutability": "mutable",
                        "name": "bobSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3672,
                        "src": "2146:27:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3668,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2146:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2058:121:20"
                  },
                  "returnParameters": {
                    "id": 3671,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2188:0:20"
                  },
                  "scope": 3703,
                  "src": "2035:154:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "4d3fcbda",
                  "id": 3683,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defundChannel",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3674,
                        "mutability": "mutable",
                        "name": "ccs",
                        "nodeType": "VariableDeclaration",
                        "scope": 3683,
                        "src": "2227:29:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreChannelState_$3566_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreChannelState"
                        },
                        "typeName": {
                          "id": 3673,
                          "name": "CoreChannelState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3566,
                          "src": "2227:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreChannelState_$3566_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreChannelState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3677,
                        "mutability": "mutable",
                        "name": "assetIds",
                        "nodeType": "VariableDeclaration",
                        "scope": 3683,
                        "src": "2266:27:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3675,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2266:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3676,
                          "nodeType": "ArrayTypeName",
                          "src": "2266:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3680,
                        "mutability": "mutable",
                        "name": "indices",
                        "nodeType": "VariableDeclaration",
                        "scope": 3683,
                        "src": "2303:26:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3678,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2303:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3679,
                          "nodeType": "ArrayTypeName",
                          "src": "2303:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2217:118:20"
                  },
                  "returnParameters": {
                    "id": 3682,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2344:0:20"
                  },
                  "scope": 3703,
                  "src": "2195:150:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "5fd334d9",
                  "id": 3691,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "disputeTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3685,
                        "mutability": "mutable",
                        "name": "cts",
                        "nodeType": "VariableDeclaration",
                        "scope": 3691,
                        "src": "2385:30:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 3684,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "2385:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3688,
                        "mutability": "mutable",
                        "name": "merkleProofData",
                        "nodeType": "VariableDeclaration",
                        "scope": 3691,
                        "src": "2425:34:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3686,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "2425:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3687,
                          "nodeType": "ArrayTypeName",
                          "src": "2425:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2375:90:20"
                  },
                  "returnParameters": {
                    "id": 3690,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2474:0:20"
                  },
                  "scope": 3703,
                  "src": "2351:124:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "072f25fd",
                  "id": 3702,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defundTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3700,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3693,
                        "mutability": "mutable",
                        "name": "cts",
                        "nodeType": "VariableDeclaration",
                        "scope": 3702,
                        "src": "2514:30:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CoreTransferState_$3585_calldata_ptr",
                          "typeString": "struct ICMCAdjudicator.CoreTransferState"
                        },
                        "typeName": {
                          "id": 3692,
                          "name": "CoreTransferState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3585,
                          "src": "2514:17:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CoreTransferState_$3585_storage_ptr",
                            "typeString": "struct ICMCAdjudicator.CoreTransferState"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3695,
                        "mutability": "mutable",
                        "name": "encodedInitialTransferState",
                        "nodeType": "VariableDeclaration",
                        "scope": 3702,
                        "src": "2554:42:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3694,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2554:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3697,
                        "mutability": "mutable",
                        "name": "encodedTransferResolver",
                        "nodeType": "VariableDeclaration",
                        "scope": 3702,
                        "src": "2606:38:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3696,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2606:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3699,
                        "mutability": "mutable",
                        "name": "responderSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3702,
                        "src": "2654:33:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3698,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2654:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2504:189:20"
                  },
                  "returnParameters": {
                    "id": 3701,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2702:0:20"
                  },
                  "scope": 3703,
                  "src": "2481:222:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3704,
              "src": "121:2584:20"
            }
          ],
          "src": "39:2667:20"
        },
        "id": 20
      },
      "src.sol/interfaces/ICMCAsset.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ICMCAsset.sol",
          "exportedSymbols": {
            "ICMCAsset": [
              3732
            ]
          },
          "id": 3733,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3705,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:21"
            },
            {
              "id": 3706,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:21"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3732,
              "linearizedBaseContracts": [
                3732
              ],
              "name": "ICMCAsset",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "cefa5122",
                  "id": 3713,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTotalTransferred",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3709,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3708,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3713,
                        "src": "153:15:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3707,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "153:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "152:17:21"
                  },
                  "returnParameters": {
                    "id": 3712,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3711,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3713,
                        "src": "217:7:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3710,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "217:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "216:9:21"
                  },
                  "scope": 3732,
                  "src": "124:102:21",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e9852569",
                  "id": 3722,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getExitableAmount",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3718,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3715,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3722,
                        "src": "259:15:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3714,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "259:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3717,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 3722,
                        "src": "276:13:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3716,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "276:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "258:32:21"
                  },
                  "returnParameters": {
                    "id": 3721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3720,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3722,
                        "src": "338:7:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "338:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "337:9:21"
                  },
                  "scope": 3732,
                  "src": "232:115:21",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "5bc9d96d",
                  "id": 3731,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3724,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3731,
                        "src": "376:15:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3723,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "376:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3726,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 3731,
                        "src": "401:13:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3725,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "401:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3728,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 3731,
                        "src": "424:25:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 3727,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "424:15:21",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "366:89:21"
                  },
                  "returnParameters": {
                    "id": 3730,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "464:0:21"
                  },
                  "scope": 3732,
                  "src": "353:112:21",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3733,
              "src": "98:369:21"
            }
          ],
          "src": "39:429:21"
        },
        "id": 21
      },
      "src.sol/interfaces/ICMCCore.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ICMCCore.sol",
          "exportedSymbols": {
            "ICMCCore": [
              3753
            ]
          },
          "id": 3754,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3734,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:22"
            },
            {
              "id": 3735,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:22"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3753,
              "linearizedBaseContracts": [
                3753
              ],
              "name": "ICMCCore",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "2d34ba79",
                  "id": 3742,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setup",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3740,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3737,
                        "mutability": "mutable",
                        "name": "_alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3742,
                        "src": "138:14:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3736,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "138:7:22",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3739,
                        "mutability": "mutable",
                        "name": "_bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3742,
                        "src": "154:12:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3738,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "154:7:22",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "137:30:22"
                  },
                  "returnParameters": {
                    "id": 3741,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176:0:22"
                  },
                  "scope": 3753,
                  "src": "123:54:22",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "eeb30fea",
                  "id": 3747,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAlice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3743,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "200:2:22"
                  },
                  "returnParameters": {
                    "id": 3746,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3745,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3747,
                        "src": "226:7:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3744,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "226:7:22",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "225:9:22"
                  },
                  "scope": 3753,
                  "src": "183:52:22",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "241686a0",
                  "id": 3752,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBob",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3748,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "256:2:22"
                  },
                  "returnParameters": {
                    "id": 3751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3750,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3752,
                        "src": "282:7:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3749,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "282:7:22",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "281:9:22"
                  },
                  "scope": 3753,
                  "src": "241:50:22",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3754,
              "src": "98:195:22"
            }
          ],
          "src": "39:255:22"
        },
        "id": 22
      },
      "src.sol/interfaces/ICMCDeposit.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ICMCDeposit.sol",
          "exportedSymbols": {
            "ICMCDeposit": [
              3784
            ]
          },
          "id": 3785,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3755,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:23"
            },
            {
              "id": 3756,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:23"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3784,
              "linearizedBaseContracts": [
                3784
              ],
              "name": "ICMCDeposit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "id": 3762,
                  "name": "AliceDeposited",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3758,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3762,
                        "src": "147:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3757,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "147:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3760,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3762,
                        "src": "164:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3759,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "164:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "146:33:23"
                  },
                  "src": "126:54:23"
                },
                {
                  "functionSelector": "6f33389e",
                  "id": 3769,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTotalDepositsAlice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3764,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3769,
                        "src": "221:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3763,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "221:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "220:17:23"
                  },
                  "returnParameters": {
                    "id": 3768,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3767,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3769,
                        "src": "285:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3766,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "285:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "284:9:23"
                  },
                  "scope": 3784,
                  "src": "190:104:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "b081e9c8",
                  "id": 3776,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTotalDepositsBob",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3772,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3771,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3776,
                        "src": "329:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3770,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "329:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "328:17:23"
                  },
                  "returnParameters": {
                    "id": 3775,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3774,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3776,
                        "src": "393:7:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3773,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "393:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "392:9:23"
                  },
                  "scope": 3784,
                  "src": "300:102:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "635ae901",
                  "id": 3783,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "depositAlice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3781,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3778,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3783,
                        "src": "430:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3777,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "430:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3780,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3783,
                        "src": "447:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "447:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "429:33:23"
                  },
                  "returnParameters": {
                    "id": 3782,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "479:0:23"
                  },
                  "scope": 3784,
                  "src": "408:72:23",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3785,
              "src": "98:384:23"
            }
          ],
          "src": "39:444:23"
        },
        "id": 23
      },
      "src.sol/interfaces/ICMCWithdraw.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ICMCWithdraw.sol",
          "exportedSymbols": {
            "ICMCWithdraw": [
              3819
            ],
            "WithdrawData": [
              3802
            ]
          },
          "id": 3820,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3786,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:24"
            },
            {
              "id": 3787,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:24"
            },
            {
              "canonicalName": "WithdrawData",
              "id": 3802,
              "members": [
                {
                  "constant": false,
                  "id": 3789,
                  "mutability": "mutable",
                  "name": "channelAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "124:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "124:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3791,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "152:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "152:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3793,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "173:25:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 3792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "173:15:24",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3795,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "204:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "204:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3797,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "224:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3796,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "224:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3799,
                  "mutability": "mutable",
                  "name": "callTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "243:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3798,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "243:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3801,
                  "mutability": "mutable",
                  "name": "callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 3802,
                  "src": "263:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3800,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "263:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "name": "WithdrawData",
              "nodeType": "StructDefinition",
              "scope": 3820,
              "src": "98:182:24",
              "visibility": "public"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3819,
              "linearizedBaseContracts": [
                3819
              ],
              "name": "ICMCWithdraw",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "8c048fc2",
                  "id": 3809,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getWithdrawalTransactionRecord",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3805,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3804,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 3809,
                        "src": "351:24:24",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 3803,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "351:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "350:26:24"
                  },
                  "returnParameters": {
                    "id": 3808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3807,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3809,
                        "src": "424:4:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3806,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "424:4:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "423:6:24"
                  },
                  "scope": 3819,
                  "src": "311:119:24",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "2c889aa1",
                  "id": 3818,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3816,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3811,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 3818,
                        "src": "463:24:24",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 3810,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "463:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3813,
                        "mutability": "mutable",
                        "name": "aliceSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3818,
                        "src": "497:29:24",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3812,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "497:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3815,
                        "mutability": "mutable",
                        "name": "bobSignature",
                        "nodeType": "VariableDeclaration",
                        "scope": 3818,
                        "src": "536:27:24",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3814,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "536:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "453:116:24"
                  },
                  "returnParameters": {
                    "id": 3817,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "578:0:24"
                  },
                  "scope": 3819,
                  "src": "436:143:24",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3820,
              "src": "282:299:24"
            }
          ],
          "src": "39:543:24"
        },
        "id": 24
      },
      "src.sol/interfaces/IChannelFactory.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/IChannelFactory.sol",
          "exportedSymbols": {
            "IChannelFactory": [
              3878
            ]
          },
          "id": 3879,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3821,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:25"
            },
            {
              "id": 3822,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:25"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3878,
              "linearizedBaseContracts": [
                3878
              ],
              "name": "IChannelFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "id": 3826,
                  "name": "ChannelCreation",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3824,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "channel",
                        "nodeType": "VariableDeclaration",
                        "scope": 3826,
                        "src": "152:15:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3823,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "152:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "151:17:25"
                  },
                  "src": "130:39:25"
                },
                {
                  "functionSelector": "efe43693",
                  "id": 3831,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getMastercopy",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3827,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "197:2:25"
                  },
                  "returnParameters": {
                    "id": 3830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3829,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3831,
                        "src": "223:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3828,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "223:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "222:9:25"
                  },
                  "scope": 3878,
                  "src": "175:57:25",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3408e470",
                  "id": 3836,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getChainId",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3832,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "257:2:25"
                  },
                  "returnParameters": {
                    "id": 3835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3834,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3836,
                        "src": "283:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "283:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "282:9:25"
                  },
                  "scope": 3878,
                  "src": "238:54:25",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "32a130c9",
                  "id": 3841,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getStoredChainId",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3837,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "323:2:25"
                  },
                  "returnParameters": {
                    "id": 3840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3839,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3841,
                        "src": "349:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "349:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "348:9:25"
                  },
                  "scope": 3878,
                  "src": "298:60:25",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "15727e91",
                  "id": 3846,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getProxyCreationCode",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3842,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "393:2:25"
                  },
                  "returnParameters": {
                    "id": 3845,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3844,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3846,
                        "src": "419:12:25",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3843,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "419:5:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "418:14:25"
                  },
                  "scope": 3878,
                  "src": "364:69:25",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e617aaac",
                  "id": 3855,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getChannelAddress",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3851,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3848,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3855,
                        "src": "466:13:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3847,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "466:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3850,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3855,
                        "src": "481:11:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3849,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "481:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "465:28:25"
                  },
                  "returnParameters": {
                    "id": 3854,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3853,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3855,
                        "src": "541:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3852,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "541:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "540:9:25"
                  },
                  "scope": 3878,
                  "src": "439:111:25",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "35a1ba6f",
                  "id": 3864,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createChannel",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3857,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3864,
                        "src": "579:13:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3856,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "579:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3859,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3864,
                        "src": "594:11:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3858,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "594:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "578:28:25"
                  },
                  "returnParameters": {
                    "id": 3863,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3862,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3864,
                        "src": "641:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3861,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "641:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "640:9:25"
                  },
                  "scope": 3878,
                  "src": "556:94:25",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "fe454501",
                  "id": 3877,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createChannelAndDepositAlice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3873,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3866,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 3877,
                        "src": "703:13:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3865,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3868,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 3877,
                        "src": "726:11:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3867,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "726:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3870,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3877,
                        "src": "747:15:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3869,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "747:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3872,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3877,
                        "src": "772:14:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3871,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "772:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "693:99:25"
                  },
                  "returnParameters": {
                    "id": 3876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3875,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3877,
                        "src": "819:7:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3874,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "819:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "818:9:25"
                  },
                  "scope": 3878,
                  "src": "656:172:25",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3879,
              "src": "98:732:25"
            }
          ],
          "src": "39:792:25"
        },
        "id": 25
      },
      "src.sol/interfaces/ITestChannel.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ITestChannel.sol",
          "exportedSymbols": {
            "ITestChannel": [
              3902
            ]
          },
          "id": 3903,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3880,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:26"
            },
            {
              "id": 3881,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:26"
            },
            {
              "absolutePath": "src.sol/interfaces/IVectorChannel.sol",
              "file": "./IVectorChannel.sol",
              "id": 3882,
              "nodeType": "ImportDirective",
              "scope": 3903,
              "sourceUnit": 4012,
              "src": "98:30:26",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/Types.sol",
              "file": "./Types.sol",
              "id": 3883,
              "nodeType": "ImportDirective",
              "scope": 3903,
              "sourceUnit": 4024,
              "src": "129:21:26",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3884,
                    "name": "IVectorChannel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4011,
                    "src": "178:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IVectorChannel_$4011",
                      "typeString": "contract IVectorChannel"
                    }
                  },
                  "id": 3885,
                  "nodeType": "InheritanceSpecifier",
                  "src": "178:14:26"
                }
              ],
              "contractDependencies": [
                3703,
                3732,
                3753,
                3784,
                3819,
                4011
              ],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3902,
              "linearizedBaseContracts": [
                3902,
                4011,
                3703,
                3819,
                3784,
                3732,
                3753
              ],
              "name": "ITestChannel",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "c55e1dac",
                  "id": 3894,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testMakeExitable",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3892,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3887,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "234:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3886,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "234:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3889,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "259:25:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 3888,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "259:15:26",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3891,
                        "mutability": "mutable",
                        "name": "maxAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "294:17:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3890,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "294:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "224:93:26"
                  },
                  "returnParameters": {
                    "id": 3893,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "326:0:26"
                  },
                  "scope": 3902,
                  "src": "199:128:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "7b037295",
                  "id": 3901,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testMakeBalanceExitable",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3899,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3896,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 3901,
                        "src": "375:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3895,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "375:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3898,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "scope": 3901,
                        "src": "400:22:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 3897,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "400:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "365:63:26"
                  },
                  "returnParameters": {
                    "id": 3900,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "437:0:26"
                  },
                  "scope": 3902,
                  "src": "333:105:26",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3903,
              "src": "152:288:26"
            }
          ],
          "src": "39:402:26"
        },
        "id": 26
      },
      "src.sol/interfaces/ITransferDefinition.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ITransferDefinition.sol",
          "exportedSymbols": {
            "ITransferDefinition": [
              3953
            ]
          },
          "id": 3954,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3904,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:27"
            },
            {
              "id": 3905,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:27"
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferRegistry.sol",
              "file": "./ITransferRegistry.sol",
              "id": 3906,
              "nodeType": "ImportDirective",
              "scope": 3954,
              "sourceUnit": 3993,
              "src": "98:33:27",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/Types.sol",
              "file": "./Types.sol",
              "id": 3907,
              "nodeType": "ImportDirective",
              "scope": 3954,
              "sourceUnit": 4024,
              "src": "132:21:27",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3953,
              "linearizedBaseContracts": [
                3953
              ],
              "name": "ITransferDefinition",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "94184ba9",
                  "id": 3916,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "create",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3912,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3909,
                        "mutability": "mutable",
                        "name": "encodedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 3916,
                        "src": "314:29:27",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3908,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "314:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3911,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3916,
                        "src": "345:14:27",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3910,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "345:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "313:47:27"
                  },
                  "returnParameters": {
                    "id": 3915,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3914,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3916,
                        "src": "408:4:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3913,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "408:4:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "407:6:27"
                  },
                  "scope": 3953,
                  "src": "298:116:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "8ef98a7e",
                  "id": 3927,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resolve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3923,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3918,
                        "mutability": "mutable",
                        "name": "encodedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 3927,
                        "src": "587:29:27",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3917,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "587:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3920,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3927,
                        "src": "626:14:27",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3919,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "626:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3922,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3927,
                        "src": "650:14:27",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3921,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "650:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "577:93:27"
                  },
                  "returnParameters": {
                    "id": 3926,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3925,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3927,
                        "src": "694:14:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 3924,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "694:7:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "693:16:27"
                  },
                  "scope": 3953,
                  "src": "561:149:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "8052474d",
                  "id": 3932,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "Name",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3928,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1125:2:27"
                  },
                  "returnParameters": {
                    "id": 3931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3930,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3932,
                        "src": "1151:13:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3929,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1151:6:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1150:15:27"
                  },
                  "scope": 3953,
                  "src": "1112:54:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "8de8b77e",
                  "id": 3937,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "StateEncoding",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3933,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1194:2:27"
                  },
                  "returnParameters": {
                    "id": 3936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3935,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3937,
                        "src": "1220:13:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3934,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1220:6:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1219:15:27"
                  },
                  "scope": 3953,
                  "src": "1172:63:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3722aff9",
                  "id": 3942,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ResolverEncoding",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3938,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1266:2:27"
                  },
                  "returnParameters": {
                    "id": 3941,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3940,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3942,
                        "src": "1292:13:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3939,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1292:6:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1291:15:27"
                  },
                  "scope": 3953,
                  "src": "1241:66:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0528aa1c",
                  "id": 3947,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "EncodedCancel",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3943,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1335:2:27"
                  },
                  "returnParameters": {
                    "id": 3946,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3945,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3947,
                        "src": "1361:12:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3944,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1361:5:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1360:14:27"
                  },
                  "scope": 3953,
                  "src": "1313:62:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "206162be",
                  "id": 3952,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRegistryInformation",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3948,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1412:2:27"
                  },
                  "returnParameters": {
                    "id": 3951,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3950,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3952,
                        "src": "1462:25:27",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 3949,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "1462:18:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1461:27:27"
                  },
                  "scope": 3953,
                  "src": "1381:108:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3954,
              "src": "155:1336:27"
            }
          ],
          "src": "39:1453:27"
        },
        "id": 27
      },
      "src.sol/interfaces/ITransferRegistry.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/ITransferRegistry.sol",
          "exportedSymbols": {
            "ITransferRegistry": [
              3992
            ],
            "RegisteredTransfer": [
              3967
            ]
          },
          "id": 3993,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3955,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:28"
            },
            {
              "id": 3956,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:35:28"
            },
            {
              "canonicalName": "RegisteredTransfer",
              "id": 3967,
              "members": [
                {
                  "constant": false,
                  "id": 3958,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3967,
                  "src": "132:11:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3957,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "132:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3960,
                  "mutability": "mutable",
                  "name": "definition",
                  "nodeType": "VariableDeclaration",
                  "scope": 3967,
                  "src": "149:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3959,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "149:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3962,
                  "mutability": "mutable",
                  "name": "stateEncoding",
                  "nodeType": "VariableDeclaration",
                  "scope": 3967,
                  "src": "173:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3961,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "173:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3964,
                  "mutability": "mutable",
                  "name": "resolverEncoding",
                  "nodeType": "VariableDeclaration",
                  "scope": 3967,
                  "src": "199:23:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3963,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "199:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3966,
                  "mutability": "mutable",
                  "name": "encodedCancel",
                  "nodeType": "VariableDeclaration",
                  "scope": 3967,
                  "src": "228:19:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3965,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "228:5:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "name": "RegisteredTransfer",
              "nodeType": "StructDefinition",
              "scope": 3993,
              "src": "100:150:28",
              "visibility": "public"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3992,
              "linearizedBaseContracts": [
                3992
              ],
              "name": "ITransferRegistry",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "id": 3971,
                  "name": "TransferAdded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3970,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3969,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "transfer",
                        "nodeType": "VariableDeclaration",
                        "scope": 3971,
                        "src": "306:27:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 3968,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "306:18:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "305:29:28"
                  },
                  "src": "286:49:28"
                },
                {
                  "anonymous": false,
                  "id": 3975,
                  "name": "TransferRemoved",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3974,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3973,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "transfer",
                        "nodeType": "VariableDeclaration",
                        "scope": 3975,
                        "src": "363:27:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 3972,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "363:18:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "362:29:28"
                  },
                  "src": "341:51:28"
                },
                {
                  "functionSelector": "55304c3f",
                  "id": 3980,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3978,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3977,
                        "mutability": "mutable",
                        "name": "transfer",
                        "nodeType": "VariableDeclaration",
                        "scope": 3980,
                        "src": "502:34:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 3976,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "502:18:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "501:36:28"
                  },
                  "returnParameters": {
                    "id": 3979,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "546:0:28"
                  },
                  "scope": 3992,
                  "src": "471:76:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "961bf9b1",
                  "id": 3985,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3983,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3982,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 3985,
                        "src": "663:18:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3981,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "663:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "662:20:28"
                  },
                  "returnParameters": {
                    "id": 3984,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "691:0:28"
                  },
                  "scope": 3992,
                  "src": "629:63:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c9ff4d25",
                  "id": 3991,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitions",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3986,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "786:2:28"
                  },
                  "returnParameters": {
                    "id": 3990,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3989,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3991,
                        "src": "836:27:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct RegisteredTransfer[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3987,
                            "name": "RegisteredTransfer",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3967,
                            "src": "836:18:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                              "typeString": "struct RegisteredTransfer"
                            }
                          },
                          "id": 3988,
                          "nodeType": "ArrayTypeName",
                          "src": "836:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_storage_$dyn_storage_ptr",
                            "typeString": "struct RegisteredTransfer[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "835:29:28"
                  },
                  "scope": 3992,
                  "src": "755:110:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3993,
              "src": "252:615:28"
            }
          ],
          "src": "39:829:28"
        },
        "id": 28
      },
      "src.sol/interfaces/IVectorChannel.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/IVectorChannel.sol",
          "exportedSymbols": {
            "IVectorChannel": [
              4011
            ]
          },
          "id": 4012,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3994,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:29"
            },
            {
              "id": 3995,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:29"
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCCore.sol",
              "file": "./ICMCCore.sol",
              "id": 3996,
              "nodeType": "ImportDirective",
              "scope": 4012,
              "sourceUnit": 3754,
              "src": "98:24:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCAsset.sol",
              "file": "./ICMCAsset.sol",
              "id": 3997,
              "nodeType": "ImportDirective",
              "scope": 4012,
              "sourceUnit": 3733,
              "src": "123:25:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCDeposit.sol",
              "file": "./ICMCDeposit.sol",
              "id": 3998,
              "nodeType": "ImportDirective",
              "scope": 4012,
              "sourceUnit": 3785,
              "src": "149:27:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCWithdraw.sol",
              "file": "./ICMCWithdraw.sol",
              "id": 3999,
              "nodeType": "ImportDirective",
              "scope": 4012,
              "sourceUnit": 3820,
              "src": "177:28:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCAdjudicator.sol",
              "file": "./ICMCAdjudicator.sol",
              "id": 4000,
              "nodeType": "ImportDirective",
              "scope": 4012,
              "sourceUnit": 3704,
              "src": "206:31:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 4001,
                    "name": "ICMCCore",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3753,
                    "src": "271:8:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCCore_$3753",
                      "typeString": "contract ICMCCore"
                    }
                  },
                  "id": 4002,
                  "nodeType": "InheritanceSpecifier",
                  "src": "271:8:29"
                },
                {
                  "baseName": {
                    "id": 4003,
                    "name": "ICMCAsset",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3732,
                    "src": "285:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCAsset_$3732",
                      "typeString": "contract ICMCAsset"
                    }
                  },
                  "id": 4004,
                  "nodeType": "InheritanceSpecifier",
                  "src": "285:9:29"
                },
                {
                  "baseName": {
                    "id": 4005,
                    "name": "ICMCDeposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3784,
                    "src": "300:11:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCDeposit_$3784",
                      "typeString": "contract ICMCDeposit"
                    }
                  },
                  "id": 4006,
                  "nodeType": "InheritanceSpecifier",
                  "src": "300:11:29"
                },
                {
                  "baseName": {
                    "id": 4007,
                    "name": "ICMCWithdraw",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3819,
                    "src": "317:12:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCWithdraw_$3819",
                      "typeString": "contract ICMCWithdraw"
                    }
                  },
                  "id": 4008,
                  "nodeType": "InheritanceSpecifier",
                  "src": "317:12:29"
                },
                {
                  "baseName": {
                    "id": 4009,
                    "name": "ICMCAdjudicator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3703,
                    "src": "335:15:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICMCAdjudicator_$3703",
                      "typeString": "contract ICMCAdjudicator"
                    }
                  },
                  "id": 4010,
                  "nodeType": "InheritanceSpecifier",
                  "src": "335:15:29"
                }
              ],
              "contractDependencies": [
                3703,
                3732,
                3753,
                3784,
                3819
              ],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 4011,
              "linearizedBaseContracts": [
                4011,
                3703,
                3819,
                3784,
                3732,
                3753
              ],
              "name": "IVectorChannel",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 4012,
              "src": "239:114:29"
            }
          ],
          "src": "39:315:29"
        },
        "id": 29
      },
      "src.sol/interfaces/Types.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/Types.sol",
          "exportedSymbols": {
            "Balance": [
              4023
            ]
          },
          "id": 4024,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4013,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:30"
            },
            {
              "id": 4014,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:30"
            },
            {
              "canonicalName": "Balance",
              "id": 4023,
              "members": [
                {
                  "constant": false,
                  "id": 4018,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4023,
                  "src": "119:17:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$2_storage_ptr",
                    "typeString": "uint256[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4015,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "119:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4017,
                    "length": {
                      "hexValue": "32",
                      "id": 4016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "127:1:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "119:10:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$2_storage_ptr",
                      "typeString": "uint256[2]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4022,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4023,
                  "src": "205:21:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$2_storage_ptr",
                    "typeString": "address payable[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4019,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "205:15:30",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4021,
                    "length": {
                      "hexValue": "32",
                      "id": 4020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "221:1:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "205:18:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$2_storage_ptr",
                      "typeString": "address payable[2]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "name": "Balance",
              "nodeType": "StructDefinition",
              "scope": 4024,
              "src": "98:194:30",
              "visibility": "public"
            }
          ],
          "src": "39:254:30"
        },
        "id": 30
      },
      "src.sol/interfaces/WithdrawHelper.sol": {
        "ast": {
          "absolutePath": "src.sol/interfaces/WithdrawHelper.sol",
          "exportedSymbols": {
            "WithdrawHelper": [
              4035
            ]
          },
          "id": 4036,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4025,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:31"
            },
            {
              "id": 4026,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:31"
            },
            {
              "absolutePath": "src.sol/interfaces/ICMCWithdraw.sol",
              "file": "./ICMCWithdraw.sol",
              "id": 4027,
              "nodeType": "ImportDirective",
              "scope": 4036,
              "sourceUnit": 3820,
              "src": "98:28:31",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 4035,
              "linearizedBaseContracts": [
                4035
              ],
              "name": "WithdrawHelper",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "f50cd32c",
                  "id": 4034,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "execute",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4032,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4029,
                        "mutability": "mutable",
                        "name": "wd",
                        "nodeType": "VariableDeclaration",
                        "scope": 4034,
                        "src": "176:24:31",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_WithdrawData_$3802_calldata_ptr",
                          "typeString": "struct WithdrawData"
                        },
                        "typeName": {
                          "id": 4028,
                          "name": "WithdrawData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3802,
                          "src": "176:12:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_WithdrawData_$3802_storage_ptr",
                            "typeString": "struct WithdrawData"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4031,
                        "mutability": "mutable",
                        "name": "actualAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4034,
                        "src": "202:20:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4030,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "202:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "175:48:31"
                  },
                  "returnParameters": {
                    "id": 4033,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "232:0:31"
                  },
                  "scope": 4035,
                  "src": "159:74:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4036,
              "src": "128:107:31"
            }
          ],
          "src": "39:197:31"
        },
        "id": 31
      },
      "src.sol/lib/LibAsset.sol": {
        "ast": {
          "absolutePath": "src.sol/lib/LibAsset.sol",
          "exportedSymbols": {
            "LibAsset": [
              4163
            ]
          },
          "id": 4164,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4037,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:32"
            },
            {
              "id": 4038,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:32"
            },
            {
              "absolutePath": "src.sol/lib/LibERC20.sol",
              "file": "./LibERC20.sol",
              "id": 4039,
              "nodeType": "ImportDirective",
              "scope": 4164,
              "sourceUnit": 4407,
              "src": "98:24:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibUtils.sol",
              "file": "./LibUtils.sol",
              "id": 4040,
              "nodeType": "ImportDirective",
              "scope": 4164,
              "sourceUnit": 4787,
              "src": "123:24:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 4041,
              "nodeType": "ImportDirective",
              "scope": 4164,
              "sourceUnit": 1155,
              "src": "148:56:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4042,
                "nodeType": "StructuredDocumentation",
                "src": "207:366:32",
                "text": "@title LibAsset\n @author Connext <support@connext.network>\n @notice This library contains helpers for dealing with onchain transfers\n         of in-channel assets. It is designed to safely handle all asset\n         transfers out of channel in the event of an onchain dispute. Also\n         safely handles ERC20 transfers that may be non-compliant"
              },
              "fullyImplemented": true,
              "id": 4163,
              "linearizedBaseContracts": [
                4163
              ],
              "name": "LibAsset",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 4048,
                  "mutability": "constant",
                  "name": "ETHER_ASSETID",
                  "nodeType": "VariableDeclaration",
                  "scope": 4163,
                  "src": "596:43:32",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4043,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "596:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 4046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "637:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 4045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "629:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4044,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "629:7:32",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "629:10:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4059,
                    "nodeType": "Block",
                    "src": "709:48:32",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4055,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4050,
                            "src": "726:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4056,
                            "name": "ETHER_ASSETID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4048,
                            "src": "737:13:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "726:24:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4054,
                        "id": 4058,
                        "nodeType": "Return",
                        "src": "719:31:32"
                      }
                    ]
                  },
                  "id": 4060,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isEther",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4050,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4060,
                        "src": "663:15:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4049,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "663:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "662:17:32"
                  },
                  "returnParameters": {
                    "id": 4054,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4053,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4060,
                        "src": "703:4:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4052,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "702:6:32"
                  },
                  "scope": 4163,
                  "src": "646:111:32",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4086,
                    "nodeType": "Block",
                    "src": "835:151:32",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "arguments": [
                              {
                                "id": 4068,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4062,
                                "src": "872:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4067,
                              "name": "isEther",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4060,
                              "src": "864:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) pure returns (bool)"
                              }
                            },
                            "id": 4069,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "864:16:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 4081,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "973:4:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_LibAsset_$4163",
                                      "typeString": "library LibAsset"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_LibAsset_$4163",
                                      "typeString": "library LibAsset"
                                    }
                                  ],
                                  "id": 4080,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "965:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4079,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "965:7:32",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4082,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "965:13:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 4076,
                                    "name": "assetId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4062,
                                    "src": "946:7:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 4075,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1154,
                                  "src": "939:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$1154_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 4077,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "939:15:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$1154",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 4078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1093,
                              "src": "939:25:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 4083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "939:40:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "864:115:32",
                          "trueExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4072,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "907:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_LibAsset_$4163",
                                    "typeString": "library LibAsset"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_LibAsset_$4163",
                                    "typeString": "library LibAsset"
                                  }
                                ],
                                "id": 4071,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "899:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4070,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "899:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "899:13:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4074,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "src": "899:21:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4066,
                        "id": 4085,
                        "nodeType": "Return",
                        "src": "845:134:32"
                      }
                    ]
                  },
                  "id": 4087,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getOwnBalance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4063,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4062,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4087,
                        "src": "786:15:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "786:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "785:17:32"
                  },
                  "returnParameters": {
                    "id": 4066,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4065,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4087,
                        "src": "826:7:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4064,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "826:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "825:9:32"
                  },
                  "scope": 4163,
                  "src": "763:223:32",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4116,
                    "nodeType": "Block",
                    "src": "1102:183:32",
                    "statements": [
                      {
                        "assignments": [
                          4097,
                          4099
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4097,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 4116,
                            "src": "1113:12:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4096,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1113:4:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4099,
                            "mutability": "mutable",
                            "name": "returnData",
                            "nodeType": "VariableDeclaration",
                            "scope": 4116,
                            "src": "1127:23:32",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4098,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1127:5:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4106,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 4104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1196:2:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "id": 4100,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4089,
                                "src": "1166:9:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 4101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "1166:14:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 4103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 4102,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4091,
                                "src": "1188:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "1166:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1166:33:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1112:87:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4110,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4097,
                              "src": "1237:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 4111,
                              "name": "returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4099,
                              "src": "1246:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4107,
                              "name": "LibUtils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4786,
                              "src": "1209:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibUtils_$4786_$",
                                "typeString": "type(library LibUtils)"
                              }
                            },
                            "id": 4109,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "revertIfCallFailed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4785,
                            "src": "1209:27:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bool,bytes memory) pure"
                            }
                          },
                          "id": 4112,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1209:48:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4113,
                        "nodeType": "ExpressionStatement",
                        "src": "1209:48:32"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 4114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1274:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 4095,
                        "id": 4115,
                        "nodeType": "Return",
                        "src": "1267:11:32"
                      }
                    ]
                  },
                  "id": 4117,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferEther",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4092,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4089,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4117,
                        "src": "1015:25:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 4088,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1015:15:32",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4091,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4117,
                        "src": "1042:14:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4090,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1042:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1014:43:32"
                  },
                  "returnParameters": {
                    "id": 4095,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4094,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4117,
                        "src": "1092:4:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4093,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1092:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1091:6:32"
                  },
                  "scope": 4163,
                  "src": "992:293:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4135,
                    "nodeType": "Block",
                    "src": "1420:69:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4130,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4119,
                              "src": "1455:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4131,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4121,
                              "src": "1464:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4132,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4123,
                              "src": "1475:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4128,
                              "name": "LibERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4406,
                              "src": "1437:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibERC20_$4406_$",
                                "typeString": "type(library LibERC20)"
                              }
                            },
                            "id": 4129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4405,
                            "src": "1437:17:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) returns (bool)"
                            }
                          },
                          "id": 4133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1437:45:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4127,
                        "id": 4134,
                        "nodeType": "Return",
                        "src": "1430:52:32"
                      }
                    ]
                  },
                  "id": 4136,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferERC20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4124,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4119,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4136,
                        "src": "1323:15:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4118,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1323:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4121,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4136,
                        "src": "1348:17:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4120,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1348:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4123,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4136,
                        "src": "1375:14:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4122,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1375:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1313:82:32"
                  },
                  "returnParameters": {
                    "id": 4127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4136,
                        "src": "1414:4:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4125,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1414:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1413:6:32"
                  },
                  "scope": 4163,
                  "src": "1291:198:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4161,
                    "nodeType": "Block",
                    "src": "2407:163:32",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "arguments": [
                              {
                                "id": 4148,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4138,
                                "src": "2444:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4147,
                              "name": "isEther",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4060,
                              "src": "2436:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) pure returns (bool)"
                              }
                            },
                            "id": 4149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2436:16:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "id": 4155,
                                "name": "assetId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4138,
                                "src": "2536:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 4156,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4140,
                                "src": "2545:9:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "id": 4157,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4142,
                                "src": "2556:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4154,
                              "name": "transferERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4136,
                              "src": "2522:13:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,address,uint256) returns (bool)"
                              }
                            },
                            "id": 4158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2522:41:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 4159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2436:127:32",
                          "trueExpression": {
                            "arguments": [
                              {
                                "id": 4151,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4140,
                                "src": "2485:9:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "id": 4152,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4142,
                                "src": "2496:6:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4150,
                              "name": "transferEther",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4117,
                              "src": "2471:13:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address payable,uint256) returns (bool)"
                              }
                            },
                            "id": 4153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2471:32:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4146,
                        "id": 4160,
                        "nodeType": "Return",
                        "src": "2417:146:32"
                      }
                    ]
                  },
                  "id": 4162,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unregisteredTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4138,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4162,
                        "src": "2302:15:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4137,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2302:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4140,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4162,
                        "src": "2327:25:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 4139,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2327:15:32",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4142,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4162,
                        "src": "2362:14:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4141,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2362:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2292:90:32"
                  },
                  "returnParameters": {
                    "id": 4146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4145,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4162,
                        "src": "2401:4:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4144,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2401:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2400:6:32"
                  },
                  "scope": 4163,
                  "src": "2263:307:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4164,
              "src": "573:1999:32"
            }
          ],
          "src": "39:2534:32"
        },
        "id": 32
      },
      "src.sol/lib/LibChannelCrypto.sol": {
        "ast": {
          "absolutePath": "src.sol/lib/LibChannelCrypto.sol",
          "exportedSymbols": {
            "LibChannelCrypto": [
              4283
            ]
          },
          "id": 4284,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4165,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:33"
            },
            {
              "id": 4166,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:33"
            },
            {
              "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
              "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
              "id": 4167,
              "nodeType": "ImportDirective",
              "scope": 4284,
              "sourceUnit": 230,
              "src": "98:56:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4168,
                "nodeType": "StructuredDocumentation",
                "src": "158:359:33",
                "text": "@author Connext <support@connext.network>\t\t\n @notice This library contains helpers for recovering signatures from a\t\t\n         Vector commitments. Channels do not allow for arbitrary signing of\t\t\n         messages to prevent misuse of private keys by injected providers,\t\t\n         and instead only sign messages with a Vector channel prefix."
              },
              "fullyImplemented": true,
              "id": 4283,
              "linearizedBaseContracts": [
                4283
              ],
              "name": "LibChannelCrypto",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4186,
                    "nodeType": "Block",
                    "src": "692:85:33",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4180,
                                "name": "hash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4170,
                                "src": "737:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 4181,
                                "name": "signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4172,
                                "src": "743:9:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 4179,
                              "name": "recoverChannelMessageSigner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4209,
                              "src": "709:27:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                              }
                            },
                            "id": 4182,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "709:44:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4183,
                            "name": "allegedSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4174,
                            "src": "757:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "709:61:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4178,
                        "id": 4185,
                        "nodeType": "Return",
                        "src": "702:68:33"
                      }
                    ]
                  },
                  "id": 4187,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkSignature",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4170,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4187,
                        "src": "581:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4169,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "581:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4172,
                        "mutability": "mutable",
                        "name": "signature",
                        "nodeType": "VariableDeclaration",
                        "scope": 4187,
                        "src": "603:22:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4171,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "603:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4174,
                        "mutability": "mutable",
                        "name": "allegedSigner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4187,
                        "src": "635:21:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4173,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "635:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "571:91:33"
                  },
                  "returnParameters": {
                    "id": 4178,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4177,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4187,
                        "src": "686:4:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4176,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "686:4:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "685:6:33"
                  },
                  "scope": 4283,
                  "src": "548:229:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4208,
                    "nodeType": "Block",
                    "src": "918:111:33",
                    "statements": [
                      {
                        "assignments": [
                          4197
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4197,
                            "mutability": "mutable",
                            "name": "digest",
                            "nodeType": "VariableDeclaration",
                            "scope": 4208,
                            "src": "928:14:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4196,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "928:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4201,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4199,
                              "name": "hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4189,
                              "src": "968:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4198,
                            "name": "toChannelSignedMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4225,
                            "src": "945:22:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 4200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "945:28:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "928:45:33"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4204,
                              "name": "digest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4197,
                              "src": "1004:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4205,
                              "name": "signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4191,
                              "src": "1012:9:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4202,
                              "name": "ECDSA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 229,
                              "src": "990:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ECDSA_$229_$",
                                "typeString": "type(library ECDSA)"
                              }
                            },
                            "id": 4203,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 211,
                            "src": "990:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes memory) pure returns (address)"
                            }
                          },
                          "id": 4206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "990:32:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 4195,
                        "id": 4207,
                        "nodeType": "Return",
                        "src": "983:39:33"
                      }
                    ]
                  },
                  "id": 4209,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recoverChannelMessageSigner",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4192,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4189,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4209,
                        "src": "820:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4188,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "820:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4191,
                        "mutability": "mutable",
                        "name": "signature",
                        "nodeType": "VariableDeclaration",
                        "scope": 4209,
                        "src": "834:22:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4190,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "834:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "819:38:33"
                  },
                  "returnParameters": {
                    "id": 4195,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4194,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4209,
                        "src": "905:7:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4193,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "905:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "904:9:33"
                  },
                  "scope": 4283,
                  "src": "783:246:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4224,
                    "nodeType": "Block",
                    "src": "1141:197:33",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "16566563746f72205369676e6564204d6573736167653a0a3332",
                                  "id": 4219,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1291:32:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_a5b2029ca3e17a8eb0ec740c6ca842ca64ccba5c754ecde2c0d325b26e488745",
                                    "typeString": "literal_string \"\u0016Vector Signed Message:\n32\""
                                  },
                                  "value": "\u0016Vector Signed Message:\n32"
                                },
                                {
                                  "id": 4220,
                                  "name": "hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4211,
                                  "src": "1325:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_a5b2029ca3e17a8eb0ec740c6ca842ca64ccba5c754ecde2c0d325b26e488745",
                                    "typeString": "literal_string \"\u0016Vector Signed Message:\n32\""
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 4217,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1274:3:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "1274:16:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4221,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1274:56:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4216,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "1264:9:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1264:67:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4215,
                        "id": 4223,
                        "nodeType": "Return",
                        "src": "1245:86:33"
                      }
                    ]
                  },
                  "id": 4225,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toChannelSignedMessage",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4212,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4211,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4225,
                        "src": "1067:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4210,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1067:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1066:14:33"
                  },
                  "returnParameters": {
                    "id": 4215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4214,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4225,
                        "src": "1128:7:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4213,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1128:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1127:9:33"
                  },
                  "scope": 4283,
                  "src": "1035:303:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4243,
                    "nodeType": "Block",
                    "src": "1495:85:33",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4237,
                                "name": "hash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4227,
                                "src": "1540:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 4238,
                                "name": "signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4229,
                                "src": "1546:9:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 4236,
                              "name": "recoverChannelMessageSigner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4209,
                              "src": "1512:27:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                              }
                            },
                            "id": 4239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1512:44:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4240,
                            "name": "allegedSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4231,
                            "src": "1560:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1512:61:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4235,
                        "id": 4242,
                        "nodeType": "Return",
                        "src": "1505:68:33"
                      }
                    ]
                  },
                  "id": 4244,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkUtilitySignature",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4232,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4227,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4244,
                        "src": "1384:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4226,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1384:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4229,
                        "mutability": "mutable",
                        "name": "signature",
                        "nodeType": "VariableDeclaration",
                        "scope": 4244,
                        "src": "1406:22:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4228,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1406:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4231,
                        "mutability": "mutable",
                        "name": "allegedSigner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4244,
                        "src": "1438:21:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4230,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1438:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1374:91:33"
                  },
                  "returnParameters": {
                    "id": 4235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4234,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4244,
                        "src": "1489:4:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4233,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1489:4:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1488:6:33"
                  },
                  "scope": 4283,
                  "src": "1344:236:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4265,
                    "nodeType": "Block",
                    "src": "1721:111:33",
                    "statements": [
                      {
                        "assignments": [
                          4254
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4254,
                            "mutability": "mutable",
                            "name": "digest",
                            "nodeType": "VariableDeclaration",
                            "scope": 4265,
                            "src": "1731:14:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4253,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1731:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4258,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4256,
                              "name": "hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4246,
                              "src": "1771:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4255,
                            "name": "toUtilitySignedMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4282,
                            "src": "1748:22:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (bytes32)"
                            }
                          },
                          "id": 4257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1748:28:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1731:45:33"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4261,
                              "name": "digest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4254,
                              "src": "1807:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4262,
                              "name": "signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4248,
                              "src": "1815:9:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4259,
                              "name": "ECDSA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 229,
                              "src": "1793:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ECDSA_$229_$",
                                "typeString": "type(library ECDSA)"
                              }
                            },
                            "id": 4260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 211,
                            "src": "1793:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes memory) pure returns (address)"
                            }
                          },
                          "id": 4263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1793:32:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 4252,
                        "id": 4264,
                        "nodeType": "Return",
                        "src": "1786:39:33"
                      }
                    ]
                  },
                  "id": 4266,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recoverUtilityMessageSigner",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4246,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4266,
                        "src": "1623:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4245,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1623:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4248,
                        "mutability": "mutable",
                        "name": "signature",
                        "nodeType": "VariableDeclaration",
                        "scope": 4266,
                        "src": "1637:22:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4247,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1637:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1622:38:33"
                  },
                  "returnParameters": {
                    "id": 4252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4251,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4266,
                        "src": "1708:7:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4250,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1708:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1707:9:33"
                  },
                  "scope": 4283,
                  "src": "1586:246:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4281,
                    "nodeType": "Block",
                    "src": "1944:198:33",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "175574696c697479205369676e6564204d6573736167653a0a3332",
                                  "id": 4276,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2094:33:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_ef2171c26287306af076b029da5be68b984db6003d963e4cc2332a081f88ec0b",
                                    "typeString": "literal_string \"\u0017Utility Signed Message:\n32\""
                                  },
                                  "value": "\u0017Utility Signed Message:\n32"
                                },
                                {
                                  "id": 4277,
                                  "name": "hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4268,
                                  "src": "2129:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_ef2171c26287306af076b029da5be68b984db6003d963e4cc2332a081f88ec0b",
                                    "typeString": "literal_string \"\u0017Utility Signed Message:\n32\""
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 4274,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "2077:3:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "2077:16:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2077:57:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4273,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "2067:9:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2067:68:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4272,
                        "id": 4280,
                        "nodeType": "Return",
                        "src": "2048:87:33"
                      }
                    ]
                  },
                  "id": 4282,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUtilitySignedMessage",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4268,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4282,
                        "src": "1870:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4267,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1870:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1869:14:33"
                  },
                  "returnParameters": {
                    "id": 4272,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4271,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4282,
                        "src": "1931:7:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4270,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1931:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1930:9:33"
                  },
                  "scope": 4283,
                  "src": "1838:304:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4284,
              "src": "517:1627:33"
            }
          ],
          "src": "39:2106:33"
        },
        "id": 33
      },
      "src.sol/lib/LibERC20.sol": {
        "ast": {
          "absolutePath": "src.sol/lib/LibERC20.sol",
          "exportedSymbols": {
            "LibERC20": [
              4406
            ]
          },
          "id": 4407,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4285,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:34"
            },
            {
              "id": 4286,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:34"
            },
            {
              "absolutePath": "src.sol/lib/LibUtils.sol",
              "file": "./LibUtils.sol",
              "id": 4287,
              "nodeType": "ImportDirective",
              "scope": 4407,
              "sourceUnit": 4787,
              "src": "98:24:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
              "file": "@openzeppelin/contracts/utils/Address.sol",
              "id": 4288,
              "nodeType": "ImportDirective",
              "scope": 4407,
              "sourceUnit": 1359,
              "src": "123:51:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4289,
                "nodeType": "StructuredDocumentation",
                "src": "176:239:34",
                "text": "@title LibERC20\n @author Connext <support@connext.network>\n @notice This library provides several functions to safely handle\n         noncompliant tokens (i.e. does not return a boolean from\n         the transfer function)"
              },
              "fullyImplemented": true,
              "id": 4406,
              "linearizedBaseContracts": [
                4406
              ],
              "name": "LibERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4335,
                    "nodeType": "Block",
                    "src": "541:279:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4301,
                                  "name": "assetId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4291,
                                  "src": "578:7:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 4299,
                                  "name": "Address",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1358,
                                  "src": "559:7:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Address_$1358_$",
                                    "typeString": "type(library Address)"
                                  }
                                },
                                "id": 4300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isContract",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1183,
                                "src": "559:18:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 4302,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "559:27:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c696245524332303a204e4f5f434f4445",
                              "id": 4303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "588:19:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_959ea1bf5ea507a8118967684b1d6eedd2db55f1112c776d30734ec63f03ea9d",
                                "typeString": "literal_string \"LibERC20: NO_CODE\""
                              },
                              "value": "LibERC20: NO_CODE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_959ea1bf5ea507a8118967684b1d6eedd2db55f1112c776d30734ec63f03ea9d",
                                "typeString": "literal_string \"LibERC20: NO_CODE\""
                              }
                            ],
                            "id": 4298,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "551:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "551:57:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4305,
                        "nodeType": "ExpressionStatement",
                        "src": "551:57:34"
                      },
                      {
                        "assignments": [
                          4307,
                          4309
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4307,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 4335,
                            "src": "619:12:34",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4306,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "619:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4309,
                            "mutability": "mutable",
                            "name": "returnData",
                            "nodeType": "VariableDeclaration",
                            "scope": 4335,
                            "src": "633:23:34",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4308,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "633:5:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4314,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4312,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4293,
                              "src": "673:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4310,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4291,
                              "src": "660:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "660:12:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "660:22:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "618:64:34"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4318,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4307,
                              "src": "720:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 4319,
                              "name": "returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4309,
                              "src": "729:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4315,
                              "name": "LibUtils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4786,
                              "src": "692:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibUtils_$4786_$",
                                "typeString": "type(library LibUtils)"
                              }
                            },
                            "id": 4317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "revertIfCallFailed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4785,
                            "src": "692:27:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bool,bytes memory) pure"
                            }
                          },
                          "id": 4320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "692:48:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4321,
                        "nodeType": "ExpressionStatement",
                        "src": "692:48:34"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 4322,
                                "name": "returnData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4309,
                                "src": "757:10:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 4323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "757:17:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "778:1:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "757:22:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 4328,
                                "name": "returnData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4309,
                                "src": "794:10:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "components": [
                                  {
                                    "id": 4330,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "807:4:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bool_$",
                                      "typeString": "type(bool)"
                                    },
                                    "typeName": {
                                      "id": 4329,
                                      "name": "bool",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "807:4:34",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "id": 4331,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "806:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bool_$",
                                  "typeString": "type(bool)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_type$_t_bool_$",
                                  "typeString": "type(bool)"
                                }
                              ],
                              "expression": {
                                "id": 4326,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "783:3:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 4327,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "decode",
                              "nodeType": "MemberAccess",
                              "src": "783:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 4332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "783:30:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "757:56:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4297,
                        "id": 4334,
                        "nodeType": "Return",
                        "src": "750:63:34"
                      }
                    ]
                  },
                  "id": 4336,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "wrapCall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4291,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4336,
                        "src": "457:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4290,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "457:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4293,
                        "mutability": "mutable",
                        "name": "callData",
                        "nodeType": "VariableDeclaration",
                        "scope": 4336,
                        "src": "474:21:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4292,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "474:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "456:40:34"
                  },
                  "returnParameters": {
                    "id": 4297,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4296,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4336,
                        "src": "531:4:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4295,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "531:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "530:6:34"
                  },
                  "scope": 4406,
                  "src": "439:381:34",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4357,
                    "nodeType": "Block",
                    "src": "947:247:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4348,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4338,
                              "src": "1002:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "617070726f766528616464726573732c75696e7432353629",
                                  "id": 4351,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1072:26:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba",
                                    "typeString": "literal_string \"approve(address,uint256)\""
                                  },
                                  "value": "approve(address,uint256)"
                                },
                                {
                                  "id": 4352,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4340,
                                  "src": "1120:7:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4353,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4342,
                                  "src": "1149:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba",
                                    "typeString": "literal_string \"approve(address,uint256)\""
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4349,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1027:3:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4350,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSignature",
                                "nodeType": "MemberAccess",
                                "src": "1027:23:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 4354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1027:146:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4347,
                            "name": "wrapCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4336,
                            "src": "976:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,bytes memory) returns (bool)"
                            }
                          },
                          "id": 4355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "976:211:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4346,
                        "id": 4356,
                        "nodeType": "Return",
                        "src": "957:230:34"
                      }
                    ]
                  },
                  "id": 4358,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4343,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4338,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4358,
                        "src": "852:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4337,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "852:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4340,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4358,
                        "src": "877:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4339,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "877:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4342,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4358,
                        "src": "902:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4341,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "902:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "842:80:34"
                  },
                  "returnParameters": {
                    "id": 4346,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4345,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4358,
                        "src": "941:4:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4344,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "941:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "940:6:34"
                  },
                  "scope": 4406,
                  "src": "826:368:34",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4382,
                    "nodeType": "Block",
                    "src": "1352:290:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4372,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4360,
                              "src": "1407:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "7472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629",
                                  "id": 4375,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1477:39:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b",
                                    "typeString": "literal_string \"transferFrom(address,address,uint256)\""
                                  },
                                  "value": "transferFrom(address,address,uint256)"
                                },
                                {
                                  "id": 4376,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4362,
                                  "src": "1538:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4377,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4364,
                                  "src": "1566:9:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4378,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4366,
                                  "src": "1597:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b",
                                    "typeString": "literal_string \"transferFrom(address,address,uint256)\""
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4373,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1432:3:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSignature",
                                "nodeType": "MemberAccess",
                                "src": "1432:23:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 4379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1432:189:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4371,
                            "name": "wrapCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4336,
                            "src": "1381:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,bytes memory) returns (bool)"
                            }
                          },
                          "id": 4380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1381:254:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4370,
                        "id": 4381,
                        "nodeType": "Return",
                        "src": "1362:273:34"
                      }
                    ]
                  },
                  "id": 4383,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4367,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4360,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4383,
                        "src": "1231:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4359,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1231:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4362,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4383,
                        "src": "1256:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4361,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1256:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4364,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4383,
                        "src": "1280:17:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1280:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4366,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4383,
                        "src": "1307:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4365,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1307:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1221:106:34"
                  },
                  "returnParameters": {
                    "id": 4370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4369,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4383,
                        "src": "1346:4:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4368,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1346:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1345:6:34"
                  },
                  "scope": 4406,
                  "src": "1200:442:34",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4404,
                    "nodeType": "Block",
                    "src": "1772:250:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4395,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4385,
                              "src": "1827:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "7472616e7366657228616464726573732c75696e7432353629",
                                  "id": 4398,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1897:27:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                    "typeString": "literal_string \"transfer(address,uint256)\""
                                  },
                                  "value": "transfer(address,uint256)"
                                },
                                {
                                  "id": 4399,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4387,
                                  "src": "1946:9:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4400,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4389,
                                  "src": "1977:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                    "typeString": "literal_string \"transfer(address,uint256)\""
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4396,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1852:3:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSignature",
                                "nodeType": "MemberAccess",
                                "src": "1852:23:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 4401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1852:149:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4394,
                            "name": "wrapCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4336,
                            "src": "1801:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,bytes memory) returns (bool)"
                            }
                          },
                          "id": 4402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1801:214:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4393,
                        "id": 4403,
                        "nodeType": "Return",
                        "src": "1782:233:34"
                      }
                    ]
                  },
                  "id": 4405,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4390,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4385,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4405,
                        "src": "1675:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4384,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1675:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4387,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4405,
                        "src": "1700:17:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4386,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1700:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4389,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4405,
                        "src": "1727:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4388,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1727:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1665:82:34"
                  },
                  "returnParameters": {
                    "id": 4393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4392,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4405,
                        "src": "1766:4:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4391,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1766:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1765:6:34"
                  },
                  "scope": 4406,
                  "src": "1648:374:34",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4407,
              "src": "416:1608:34"
            }
          ],
          "src": "39:1986:34"
        },
        "id": 34
      },
      "src.sol/lib/LibIterableMapping.sol": {
        "ast": {
          "absolutePath": "src.sol/lib/LibIterableMapping.sol",
          "exportedSymbols": {
            "LibIterableMapping": [
              4735
            ]
          },
          "id": 4736,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4408,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:35"
            },
            {
              "id": 4409,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:35"
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferRegistry.sol",
              "file": "../interfaces/ITransferRegistry.sol",
              "id": 4410,
              "nodeType": "ImportDirective",
              "scope": 4736,
              "sourceUnit": 3993,
              "src": "98:45:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4411,
                "nodeType": "StructuredDocumentation",
                "src": "145:273:35",
                "text": "@title LibIterableMapping\n @author Connext <support@connext.network>\n @notice This library provides an efficient way to store and retrieve\n         RegisteredTransfers. This contract is used to manage the transfers\n         stored by `TransferRegistry.sol`"
              },
              "fullyImplemented": true,
              "id": 4735,
              "linearizedBaseContracts": [
                4735
              ],
              "name": "LibIterableMapping",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "LibIterableMapping.TransferDefinitionWithIndex",
                  "id": 4416,
                  "members": [
                    {
                      "constant": false,
                      "id": 4413,
                      "mutability": "mutable",
                      "name": "transfer",
                      "nodeType": "VariableDeclaration",
                      "scope": 4416,
                      "src": "496:27:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                        "typeString": "struct RegisteredTransfer"
                      },
                      "typeName": {
                        "id": 4412,
                        "name": "RegisteredTransfer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3967,
                        "src": "496:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                          "typeString": "struct RegisteredTransfer"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4415,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "scope": 4416,
                      "src": "533:13:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4414,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "533:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TransferDefinitionWithIndex",
                  "nodeType": "StructDefinition",
                  "scope": 4735,
                  "src": "451:102:35",
                  "visibility": "public"
                },
                {
                  "canonicalName": "LibIterableMapping.IterableMapping",
                  "id": 4424,
                  "members": [
                    {
                      "constant": false,
                      "id": 4420,
                      "mutability": "mutable",
                      "name": "transfers",
                      "nodeType": "VariableDeclaration",
                      "scope": 4424,
                      "src": "592:56:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                        "typeString": "mapping(string => struct LibIterableMapping.TransferDefinitionWithIndex)"
                      },
                      "typeName": {
                        "id": 4419,
                        "keyType": {
                          "id": 4417,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "600:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "592:46:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                          "typeString": "mapping(string => struct LibIterableMapping.TransferDefinitionWithIndex)"
                        },
                        "valueType": {
                          "id": 4418,
                          "name": "TransferDefinitionWithIndex",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4416,
                          "src": "610:27:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage_ptr",
                            "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex"
                          }
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4423,
                      "mutability": "mutable",
                      "name": "names",
                      "nodeType": "VariableDeclaration",
                      "scope": 4424,
                      "src": "658:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                        "typeString": "string[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4421,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "658:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "id": 4422,
                        "nodeType": "ArrayTypeName",
                        "src": "658:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "IterableMapping",
                  "nodeType": "StructDefinition",
                  "scope": 4735,
                  "src": "559:120:35",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4447,
                    "nodeType": "Block",
                    "src": "797:88:35",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 4436,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4426,
                                    "src": "841:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4434,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "824:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 4435,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "824:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 4437,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "824:19:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 4433,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "814:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "814:30:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 4442,
                                    "name": "t",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4428,
                                    "src": "875:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4440,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "858:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 4441,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "858:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 4443,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "858:19:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 4439,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "848:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "848:30:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "814:64:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4432,
                        "id": 4446,
                        "nodeType": "Return",
                        "src": "807:71:35"
                      }
                    ]
                  },
                  "id": 4448,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stringEqual",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4426,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 4448,
                        "src": "706:15:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4425,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "706:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4428,
                        "mutability": "mutable",
                        "name": "t",
                        "nodeType": "VariableDeclaration",
                        "scope": 4448,
                        "src": "723:15:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4427,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "723:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "705:34:35"
                  },
                  "returnParameters": {
                    "id": 4432,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4431,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4448,
                        "src": "787:4:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4430,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "787:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "786:6:35"
                  },
                  "scope": 4735,
                  "src": "685:200:35",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4460,
                    "nodeType": "Block",
                    "src": "960:42:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4456,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4450,
                              "src": "989:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 4457,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "992:2:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 4455,
                            "name": "stringEqual",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4448,
                            "src": "977:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (string memory,string memory) pure returns (bool)"
                            }
                          },
                          "id": 4458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "977:18:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4454,
                        "id": 4459,
                        "nodeType": "Return",
                        "src": "970:25:35"
                      }
                    ]
                  },
                  "id": 4461,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isEmptyString",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4451,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4450,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 4461,
                        "src": "914:15:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4449,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "913:17:35"
                  },
                  "returnParameters": {
                    "id": 4454,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4453,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4461,
                        "src": "954:4:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4452,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "954:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "953:6:35"
                  },
                  "scope": 4735,
                  "src": "891:111:35",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4493,
                    "nodeType": "Block",
                    "src": "1135:167:35",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 4479,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "1164:20:35",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 4471,
                                    "name": "name",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4465,
                                    "src": "1179:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4470,
                                  "name": "isEmptyString",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4461,
                                  "src": "1165:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (string memory) pure returns (bool)"
                                  }
                                },
                                "id": 4472,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1165:19:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "expression": {
                                    "id": 4474,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4463,
                                    "src": "1200:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                      "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                    }
                                  },
                                  "id": 4475,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "names",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4423,
                                  "src": "1200:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                    "typeString": "string storage ref[] storage ref"
                                  }
                                },
                                "id": 4476,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "1200:17:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 4477,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1221:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1200:22:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "1164:58:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "expression": {
                                    "id": 4481,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4463,
                                    "src": "1250:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                      "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                    }
                                  },
                                  "id": 4482,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "names",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4423,
                                  "src": "1250:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                    "typeString": "string storage ref[] storage ref"
                                  }
                                },
                                "id": 4488,
                                "indexExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "expression": {
                                        "id": 4483,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4463,
                                        "src": "1261:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                          "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                        }
                                      },
                                      "id": 4484,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "transfers",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4420,
                                      "src": "1261:14:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                        "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                                      }
                                    },
                                    "id": 4486,
                                    "indexExpression": {
                                      "id": 4485,
                                      "name": "name",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4465,
                                      "src": "1276:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1261:20:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                                      "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                                    }
                                  },
                                  "id": 4487,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "index",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4415,
                                  "src": "1261:26:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1250:38:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_storage",
                                  "typeString": "string storage ref"
                                }
                              },
                              {
                                "id": 4489,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "1290:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_storage",
                                  "typeString": "string storage ref"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 4480,
                              "name": "stringEqual",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4448,
                              "src": "1238:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                                "typeString": "function (string memory,string memory) pure returns (bool)"
                              }
                            },
                            "id": 4490,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1238:57:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1164:131:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4469,
                        "id": 4492,
                        "nodeType": "Return",
                        "src": "1145:150:35"
                      }
                    ]
                  },
                  "id": 4494,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nameExists",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4463,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4494,
                        "src": "1028:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4462,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "1028:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4465,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 4494,
                        "src": "1058:18:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4464,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1058:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1027:50:35"
                  },
                  "returnParameters": {
                    "id": 4469,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4468,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4494,
                        "src": "1125:4:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4467,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1125:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1124:6:35"
                  },
                  "scope": 4735,
                  "src": "1008:294:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4505,
                    "nodeType": "Block",
                    "src": "1414:41:35",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "expression": {
                              "id": 4501,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4496,
                              "src": "1431:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                              }
                            },
                            "id": 4502,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "names",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4423,
                            "src": "1431:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 4503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "1431:17:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4500,
                        "id": 4504,
                        "nodeType": "Return",
                        "src": "1424:24:35"
                      }
                    ]
                  },
                  "id": 4506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "length",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4497,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4496,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4506,
                        "src": "1324:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4495,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "1324:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1323:30:35"
                  },
                  "returnParameters": {
                    "id": 4500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4499,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4506,
                        "src": "1401:7:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4498,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1401:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1400:9:35"
                  },
                  "scope": 4735,
                  "src": "1308:147:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4529,
                    "nodeType": "Block",
                    "src": "1620:132:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4517,
                                  "name": "self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4508,
                                  "src": "1649:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  }
                                },
                                {
                                  "id": 4518,
                                  "name": "name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4510,
                                  "src": "1655:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 4516,
                                "name": "nameExists",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4494,
                                "src": "1638:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory) view returns (bool)"
                                }
                              },
                              "id": 4519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1638:22:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f554e44",
                              "id": 4520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1662:36:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fa913a461b0d3fc0065a5eb75d26201264c07947d4a297b78d9b6bfb95fb6161",
                                "typeString": "literal_string \"LibIterableMapping: NAME_NOT_FOUND\""
                              },
                              "value": "LibIterableMapping: NAME_NOT_FOUND"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fa913a461b0d3fc0065a5eb75d26201264c07947d4a297b78d9b6bfb95fb6161",
                                "typeString": "literal_string \"LibIterableMapping: NAME_NOT_FOUND\""
                              }
                            ],
                            "id": 4515,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1630:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1630:69:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4522,
                        "nodeType": "ExpressionStatement",
                        "src": "1630:69:35"
                      },
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "expression": {
                                "id": 4523,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4508,
                                "src": "1716:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4524,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transfers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4420,
                              "src": "1716:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                              }
                            },
                            "id": 4526,
                            "indexExpression": {
                              "id": 4525,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4510,
                              "src": "1731:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1716:20:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                              "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                            }
                          },
                          "id": 4527,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4413,
                          "src": "1716:29:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage",
                            "typeString": "struct RegisteredTransfer storage ref"
                          }
                        },
                        "functionReturnParameters": 4514,
                        "id": 4528,
                        "nodeType": "Return",
                        "src": "1709:36:35"
                      }
                    ]
                  },
                  "id": 4530,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitionByName",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4511,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4508,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4530,
                        "src": "1507:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4507,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "1507:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4510,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 4530,
                        "src": "1545:18:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4509,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1545:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1497:72:35"
                  },
                  "returnParameters": {
                    "id": 4514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4513,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4530,
                        "src": "1593:25:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 4512,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "1593:18:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1592:27:35"
                  },
                  "scope": 4735,
                  "src": "1461:291:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4557,
                    "nodeType": "Block",
                    "src": "1913:147:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4540,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4534,
                                "src": "1931:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "id": 4541,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4532,
                                    "src": "1939:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                      "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                    }
                                  },
                                  "id": 4542,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "names",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4423,
                                  "src": "1939:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                    "typeString": "string storage ref[] storage ref"
                                  }
                                },
                                "id": 4543,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "1939:17:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1931:25:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c69624974657261626c654d617070696e673a20494e56414c49445f494e444558",
                              "id": 4545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1958:35:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e1bd2e83ea8adbd321dc3736d801533fe2deed8ecb5f4bb7d2ef9f5b672a87b5",
                                "typeString": "literal_string \"LibIterableMapping: INVALID_INDEX\""
                              },
                              "value": "LibIterableMapping: INVALID_INDEX"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e1bd2e83ea8adbd321dc3736d801533fe2deed8ecb5f4bb7d2ef9f5b672a87b5",
                                "typeString": "literal_string \"LibIterableMapping: INVALID_INDEX\""
                              }
                            ],
                            "id": 4539,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1923:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1923:71:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4547,
                        "nodeType": "ExpressionStatement",
                        "src": "1923:71:35"
                      },
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "expression": {
                                "id": 4548,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4532,
                                "src": "2011:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4549,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transfers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4420,
                              "src": "2011:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                              }
                            },
                            "id": 4554,
                            "indexExpression": {
                              "baseExpression": {
                                "expression": {
                                  "id": 4550,
                                  "name": "self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4532,
                                  "src": "2026:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  }
                                },
                                "id": 4551,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "names",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4423,
                                "src": "2026:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                  "typeString": "string storage ref[] storage ref"
                                }
                              },
                              "id": 4553,
                              "indexExpression": {
                                "id": 4552,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4534,
                                "src": "2037:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2026:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage",
                                "typeString": "string storage ref"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2011:33:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                              "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                            }
                          },
                          "id": 4555,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4413,
                          "src": "2011:42:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage",
                            "typeString": "struct RegisteredTransfer storage ref"
                          }
                        },
                        "functionReturnParameters": 4538,
                        "id": 4556,
                        "nodeType": "Return",
                        "src": "2004:49:35"
                      }
                    ]
                  },
                  "id": 4558,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitionByIndex",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4535,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4532,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4558,
                        "src": "1805:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4531,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "1805:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4534,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "scope": 4558,
                        "src": "1843:13:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4533,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1843:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1795:67:35"
                  },
                  "returnParameters": {
                    "id": 4538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4537,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4558,
                        "src": "1886:25:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 4536,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "1886:18:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1885:27:35"
                  },
                  "scope": 4735,
                  "src": "1758:302:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4609,
                    "nodeType": "Block",
                    "src": "2208:268:35",
                    "statements": [
                      {
                        "assignments": [
                          4567
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4567,
                            "mutability": "mutable",
                            "name": "l",
                            "nodeType": "VariableDeclaration",
                            "scope": 4609,
                            "src": "2218:9:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4566,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2218:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4571,
                        "initialValue": {
                          "expression": {
                            "expression": {
                              "id": 4568,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4560,
                              "src": "2230:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                              }
                            },
                            "id": 4569,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "names",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4423,
                            "src": "2230:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 4570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "2230:17:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2218:29:35"
                      },
                      {
                        "assignments": [
                          4575
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4575,
                            "mutability": "mutable",
                            "name": "transfers",
                            "nodeType": "VariableDeclaration",
                            "scope": 4609,
                            "src": "2257:37:35",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct RegisteredTransfer[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4573,
                                "name": "RegisteredTransfer",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3967,
                                "src": "2257:18:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                                  "typeString": "struct RegisteredTransfer"
                                }
                              },
                              "id": 4574,
                              "nodeType": "ArrayTypeName",
                              "src": "2257:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_storage_$dyn_storage_ptr",
                                "typeString": "struct RegisteredTransfer[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4581,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4579,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4567,
                              "src": "2322:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4578,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2297:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (struct RegisteredTransfer memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 4576,
                                "name": "RegisteredTransfer",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3967,
                                "src": "2301:18:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                                  "typeString": "struct RegisteredTransfer"
                                }
                              },
                              "id": 4577,
                              "nodeType": "ArrayTypeName",
                              "src": "2301:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_storage_$dyn_storage_ptr",
                                "typeString": "struct RegisteredTransfer[]"
                              }
                            }
                          },
                          "id": 4580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2297:27:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2257:67:35"
                      },
                      {
                        "body": {
                          "id": 4605,
                          "nodeType": "Block",
                          "src": "2366:78:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 4603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 4592,
                                    "name": "transfers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4575,
                                    "src": "2380:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct RegisteredTransfer memory[] memory"
                                    }
                                  },
                                  "id": 4594,
                                  "indexExpression": {
                                    "id": 4593,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4583,
                                    "src": "2390:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2380:12:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                    "typeString": "struct RegisteredTransfer memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "expression": {
                                        "id": 4595,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4560,
                                        "src": "2395:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                          "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                        }
                                      },
                                      "id": 4596,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "transfers",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4420,
                                      "src": "2395:14:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                        "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                                      }
                                    },
                                    "id": 4601,
                                    "indexExpression": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 4597,
                                          "name": "self",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4560,
                                          "src": "2410:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                            "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                          }
                                        },
                                        "id": 4598,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "names",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4423,
                                        "src": "2410:10:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                          "typeString": "string storage ref[] storage ref"
                                        }
                                      },
                                      "id": 4600,
                                      "indexExpression": {
                                        "id": 4599,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4583,
                                        "src": "2421:1:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2410:13:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_storage",
                                        "typeString": "string storage ref"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2395:29:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                                      "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                                    }
                                  },
                                  "id": 4602,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4413,
                                  "src": "2395:38:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage",
                                    "typeString": "struct RegisteredTransfer storage ref"
                                  }
                                },
                                "src": "2380:53:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                  "typeString": "struct RegisteredTransfer memory"
                                }
                              },
                              "id": 4604,
                              "nodeType": "ExpressionStatement",
                              "src": "2380:53:35"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4586,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4583,
                            "src": "2354:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4587,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4567,
                            "src": "2358:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2354:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4606,
                        "initializationExpression": {
                          "assignments": [
                            4583
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4583,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 4606,
                              "src": "2339:9:35",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 4582,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2339:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4585,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 4584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2351:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2339:13:35"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 4590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "2361:3:35",
                            "subExpression": {
                              "id": 4589,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4583,
                              "src": "2361:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4591,
                          "nodeType": "ExpressionStatement",
                          "src": "2361:3:35"
                        },
                        "nodeType": "ForStatement",
                        "src": "2334:110:35"
                      },
                      {
                        "expression": {
                          "id": 4607,
                          "name": "transfers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4575,
                          "src": "2460:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory[] memory"
                          }
                        },
                        "functionReturnParameters": 4565,
                        "id": 4608,
                        "nodeType": "Return",
                        "src": "2453:16:35"
                      }
                    ]
                  },
                  "id": 4610,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitions",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4561,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4560,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4610,
                        "src": "2098:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4559,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "2098:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2097:30:35"
                  },
                  "returnParameters": {
                    "id": 4565,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4564,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4610,
                        "src": "2175:27:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct RegisteredTransfer[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4562,
                            "name": "RegisteredTransfer",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3967,
                            "src": "2175:18:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                              "typeString": "struct RegisteredTransfer"
                            }
                          },
                          "id": 4563,
                          "nodeType": "ArrayTypeName",
                          "src": "2175:20:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_storage_$dyn_storage_ptr",
                            "typeString": "struct RegisteredTransfer[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2174:29:35"
                  },
                  "scope": 4735,
                  "src": "2066:410:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4660,
                    "nodeType": "Block",
                    "src": "2610:381:35",
                    "statements": [
                      {
                        "assignments": [
                          4618
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4618,
                            "mutability": "mutable",
                            "name": "name",
                            "nodeType": "VariableDeclaration",
                            "scope": 4660,
                            "src": "2620:18:35",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 4617,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2620:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4621,
                        "initialValue": {
                          "expression": {
                            "id": 4619,
                            "name": "transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4614,
                            "src": "2641:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                              "typeString": "struct RegisteredTransfer memory"
                            }
                          },
                          "id": 4620,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "name",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3958,
                          "src": "2641:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2620:34:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4626,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "2672:20:35",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 4624,
                                    "name": "name",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4618,
                                    "src": "2687:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4623,
                                  "name": "isEmptyString",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4461,
                                  "src": "2673:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (string memory) pure returns (bool)"
                                  }
                                },
                                "id": 4625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2673:19:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c69624974657261626c654d617070696e673a20454d5054595f4e414d45",
                              "id": 4627,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2694:32:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9b1acdd13af80936adbc5a6c8367ae4533a5de2da3212cb375a019b159aeace8",
                                "typeString": "literal_string \"LibIterableMapping: EMPTY_NAME\""
                              },
                              "value": "LibIterableMapping: EMPTY_NAME"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9b1acdd13af80936adbc5a6c8367ae4533a5de2da3212cb375a019b159aeace8",
                                "typeString": "literal_string \"LibIterableMapping: EMPTY_NAME\""
                              }
                            ],
                            "id": 4622,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2664:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2664:63:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4629,
                        "nodeType": "ExpressionStatement",
                        "src": "2664:63:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "2745:23:35",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 4632,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4612,
                                    "src": "2757:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                      "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                    }
                                  },
                                  {
                                    "id": 4633,
                                    "name": "name",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4618,
                                    "src": "2763:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                      "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4631,
                                  "name": "nameExists",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4494,
                                  "src": "2746:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory) view returns (bool)"
                                  }
                                },
                                "id": 4634,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2746:22:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c69624974657261626c654d617070696e673a204e414d455f414c52454144595f4144444544",
                              "id": 4636,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2770:40:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7fc23a3a10a09942079d78e258635f85ba7102596adf96d12a8544bad20a7535",
                                "typeString": "literal_string \"LibIterableMapping: NAME_ALREADY_ADDED\""
                              },
                              "value": "LibIterableMapping: NAME_ALREADY_ADDED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7fc23a3a10a09942079d78e258635f85ba7102596adf96d12a8544bad20a7535",
                                "typeString": "literal_string \"LibIterableMapping: NAME_ALREADY_ADDED\""
                              }
                            ],
                            "id": 4630,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2737:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2737:74:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4638,
                        "nodeType": "ExpressionStatement",
                        "src": "2737:74:35"
                      },
                      {
                        "expression": {
                          "id": 4650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "expression": {
                                "id": 4639,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4612,
                                "src": "2821:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4642,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transfers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4420,
                              "src": "2821:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                              }
                            },
                            "id": 4643,
                            "indexExpression": {
                              "id": 4641,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4618,
                              "src": "2836:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2821:20:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                              "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 4645,
                                "name": "transfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4614,
                                "src": "2896:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                  "typeString": "struct RegisteredTransfer memory"
                                }
                              },
                              {
                                "expression": {
                                  "expression": {
                                    "id": 4646,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4612,
                                    "src": "2925:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                      "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                    }
                                  },
                                  "id": 4647,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "names",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4423,
                                  "src": "2925:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                    "typeString": "string storage ref[] storage ref"
                                  }
                                },
                                "id": 4648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "2925:17:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                  "typeString": "struct RegisteredTransfer memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4644,
                              "name": "TransferDefinitionWithIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4416,
                              "src": "2844:27:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferDefinitionWithIndex_$4416_storage_ptr_$",
                                "typeString": "type(struct LibIterableMapping.TransferDefinitionWithIndex storage pointer)"
                              }
                            },
                            "id": 4649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [
                              "transfer",
                              "index"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "2844:109:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_memory_ptr",
                              "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex memory"
                            }
                          },
                          "src": "2821:132:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                            "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                          }
                        },
                        "id": 4651,
                        "nodeType": "ExpressionStatement",
                        "src": "2821:132:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4657,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4618,
                              "src": "2979:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 4652,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4612,
                                "src": "2963:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4655,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "names",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4423,
                              "src": "2963:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 4656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "2963:15:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_string_storage_$returns$__$",
                              "typeString": "function (string storage ref)"
                            }
                          },
                          "id": 4658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2963:21:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4659,
                        "nodeType": "ExpressionStatement",
                        "src": "2963:21:35"
                      }
                    ]
                  },
                  "id": 4661,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4615,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4612,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4661,
                        "src": "2522:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4611,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "2522:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4614,
                        "mutability": "mutable",
                        "name": "transfer",
                        "nodeType": "VariableDeclaration",
                        "scope": 4661,
                        "src": "2560:34:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 4613,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "2560:18:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2512:88:35"
                  },
                  "returnParameters": {
                    "id": 4616,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2610:0:35"
                  },
                  "scope": 4735,
                  "src": "2482:509:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4733,
                    "nodeType": "Block",
                    "src": "3112:428:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4672,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "3130:20:35",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 4670,
                                    "name": "name",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4665,
                                    "src": "3145:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 4669,
                                  "name": "isEmptyString",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4461,
                                  "src": "3131:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (string memory) pure returns (bool)"
                                  }
                                },
                                "id": 4671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3131:19:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c69624974657261626c654d617070696e673a20454d5054595f4e414d45",
                              "id": 4673,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3152:32:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9b1acdd13af80936adbc5a6c8367ae4533a5de2da3212cb375a019b159aeace8",
                                "typeString": "literal_string \"LibIterableMapping: EMPTY_NAME\""
                              },
                              "value": "LibIterableMapping: EMPTY_NAME"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9b1acdd13af80936adbc5a6c8367ae4533a5de2da3212cb375a019b159aeace8",
                                "typeString": "literal_string \"LibIterableMapping: EMPTY_NAME\""
                              }
                            ],
                            "id": 4668,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3122:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3122:63:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4675,
                        "nodeType": "ExpressionStatement",
                        "src": "3122:63:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4678,
                                  "name": "self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4663,
                                  "src": "3214:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  }
                                },
                                {
                                  "id": 4679,
                                  "name": "name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4665,
                                  "src": "3220:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 4677,
                                "name": "nameExists",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4494,
                                "src": "3203:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory) view returns (bool)"
                                }
                              },
                              "id": 4680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3203:22:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f554e44",
                              "id": 4681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3227:36:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fa913a461b0d3fc0065a5eb75d26201264c07947d4a297b78d9b6bfb95fb6161",
                                "typeString": "literal_string \"LibIterableMapping: NAME_NOT_FOUND\""
                              },
                              "value": "LibIterableMapping: NAME_NOT_FOUND"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fa913a461b0d3fc0065a5eb75d26201264c07947d4a297b78d9b6bfb95fb6161",
                                "typeString": "literal_string \"LibIterableMapping: NAME_NOT_FOUND\""
                              }
                            ],
                            "id": 4676,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3195:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3195:69:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4683,
                        "nodeType": "ExpressionStatement",
                        "src": "3195:69:35"
                      },
                      {
                        "assignments": [
                          4685
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4685,
                            "mutability": "mutable",
                            "name": "index",
                            "nodeType": "VariableDeclaration",
                            "scope": 4733,
                            "src": "3274:13:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4684,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3274:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4691,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "expression": {
                                "id": 4686,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4663,
                                "src": "3290:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4687,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transfers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4420,
                              "src": "3290:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                              }
                            },
                            "id": 4689,
                            "indexExpression": {
                              "id": 4688,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4665,
                              "src": "3305:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3290:20:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                              "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                            }
                          },
                          "id": 4690,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "index",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4415,
                          "src": "3290:26:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3274:42:35"
                      },
                      {
                        "assignments": [
                          4693
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4693,
                            "mutability": "mutable",
                            "name": "lastName",
                            "nodeType": "VariableDeclaration",
                            "scope": 4733,
                            "src": "3326:22:35",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 4692,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3326:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4702,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 4694,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4663,
                              "src": "3351:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                              }
                            },
                            "id": 4695,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "names",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4423,
                            "src": "3351:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 4701,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "id": 4696,
                                  "name": "self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4663,
                                  "src": "3362:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  }
                                },
                                "id": 4697,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "names",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4423,
                                "src": "3362:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                  "typeString": "string storage ref[] storage ref"
                                }
                              },
                              "id": 4698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3362:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3382:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "3362:21:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3351:33:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3326:58:35"
                      },
                      {
                        "expression": {
                          "id": 4710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "expression": {
                                  "id": 4703,
                                  "name": "self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4663,
                                  "src": "3394:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                    "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                  }
                                },
                                "id": 4706,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfers",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4420,
                                "src": "3394:14:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                  "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                                }
                              },
                              "id": 4707,
                              "indexExpression": {
                                "id": 4705,
                                "name": "lastName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4693,
                                "src": "3409:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3394:24:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                                "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                              }
                            },
                            "id": 4708,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "index",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4415,
                            "src": "3394:30:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4709,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4685,
                            "src": "3427:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3394:38:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4711,
                        "nodeType": "ExpressionStatement",
                        "src": "3394:38:35"
                      },
                      {
                        "expression": {
                          "id": 4718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "expression": {
                                "id": 4712,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4663,
                                "src": "3442:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4715,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "names",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4423,
                              "src": "3442:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 4716,
                            "indexExpression": {
                              "id": 4714,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4685,
                              "src": "3453:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3442:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4717,
                            "name": "lastName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4693,
                            "src": "3462:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3442:28:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 4719,
                        "nodeType": "ExpressionStatement",
                        "src": "3442:28:35"
                      },
                      {
                        "expression": {
                          "id": 4724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "3480:27:35",
                          "subExpression": {
                            "baseExpression": {
                              "expression": {
                                "id": 4720,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4663,
                                "src": "3487:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4721,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transfers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4420,
                              "src": "3487:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_TransferDefinitionWithIndex_$4416_storage_$",
                                "typeString": "mapping(string memory => struct LibIterableMapping.TransferDefinitionWithIndex storage ref)"
                              }
                            },
                            "id": 4723,
                            "indexExpression": {
                              "id": 4722,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4665,
                              "src": "3502:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3487:20:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferDefinitionWithIndex_$4416_storage",
                              "typeString": "struct LibIterableMapping.TransferDefinitionWithIndex storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4725,
                        "nodeType": "ExpressionStatement",
                        "src": "3480:27:35"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "expression": {
                                "id": 4726,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4663,
                                "src": "3517:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                                  "typeString": "struct LibIterableMapping.IterableMapping storage pointer"
                                }
                              },
                              "id": 4729,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "names",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4423,
                              "src": "3517:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 4730,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pop",
                            "nodeType": "MemberAccess",
                            "src": "3517:14:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3517:16:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4732,
                        "nodeType": "ExpressionStatement",
                        "src": "3517:16:35"
                      }
                    ]
                  },
                  "id": 4734,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4663,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 4734,
                        "src": "3040:28:35",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                          "typeString": "struct LibIterableMapping.IterableMapping"
                        },
                        "typeName": {
                          "id": 4662,
                          "name": "IterableMapping",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4424,
                          "src": "3040:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                            "typeString": "struct LibIterableMapping.IterableMapping"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4665,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 4734,
                        "src": "3078:18:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4664,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3078:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3030:72:35"
                  },
                  "returnParameters": {
                    "id": 4667,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3112:0:35"
                  },
                  "scope": 4735,
                  "src": "2997:543:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4736,
              "src": "418:3124:35"
            }
          ],
          "src": "39:3504:35"
        },
        "id": 35
      },
      "src.sol/lib/LibMath.sol": {
        "ast": {
          "absolutePath": "src.sol/lib/LibMath.sol",
          "exportedSymbols": {
            "LibMath": [
              4768
            ]
          },
          "id": 4769,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4737,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:36"
            },
            {
              "id": 4738,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:36"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4739,
                "nodeType": "StructuredDocumentation",
                "src": "98:400:36",
                "text": "@title LibMath\n @author Connext <support@connext.network>\n @notice This library allows functions that would otherwise overflow and\n         revert if SafeMath was used to instead return the UINT_MAX. In the\n         adjudicator, this is used to ensure you can get the majority of\n         funds out in the event your balance > UINT_MAX and there is an\n         onchain dispute."
              },
              "fullyImplemented": true,
              "id": 4768,
              "linearizedBaseContracts": [
                4768
              ],
              "name": "LibMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4766,
                    "nodeType": "Block",
                    "src": "704:87:36",
                    "statements": [
                      {
                        "assignments": [
                          4750
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4750,
                            "mutability": "mutable",
                            "name": "sum",
                            "nodeType": "VariableDeclaration",
                            "scope": 4766,
                            "src": "714:11:36",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4749,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "714:7:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4754,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4751,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4742,
                            "src": "728:1:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 4752,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4744,
                            "src": "732:1:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "728:5:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "714:19:36"
                      },
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4755,
                              "name": "sum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4750,
                              "src": "750:3:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "id": 4756,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4742,
                              "src": "757:1:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "750:8:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4761,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "772:7:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4760,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "772:7:36",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  }
                                ],
                                "id": 4759,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "767:4:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 4762,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "767:13:36",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint256",
                                "typeString": "type(uint256)"
                              }
                            },
                            "id": 4763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "767:17:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "750:34:36",
                          "trueExpression": {
                            "id": 4758,
                            "name": "sum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4750,
                            "src": "761:3:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4748,
                        "id": 4765,
                        "nodeType": "Return",
                        "src": "743:41:36"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4740,
                    "nodeType": "StructuredDocumentation",
                    "src": "520:109:36",
                    "text": "@dev Returns the maximum uint256 for an addition that would overflow\n      (saturation arithmetic)"
                  },
                  "id": 4767,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "satAdd",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4742,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 4767,
                        "src": "650:9:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4741,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "650:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4744,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 4767,
                        "src": "661:9:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4743,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "661:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "649:22:36"
                  },
                  "returnParameters": {
                    "id": 4748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4747,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4767,
                        "src": "695:7:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4746,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "695:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "694:9:36"
                  },
                  "scope": 4768,
                  "src": "634:157:36",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4769,
              "src": "498:295:36"
            }
          ],
          "src": "39:755:36"
        },
        "id": 36
      },
      "src.sol/lib/LibUtils.sol": {
        "ast": {
          "absolutePath": "src.sol/lib/LibUtils.sol",
          "exportedSymbols": {
            "LibUtils": [
              4786
            ]
          },
          "id": 4787,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4770,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:37"
            },
            {
              "id": 4771,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:37"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4772,
                "nodeType": "StructuredDocumentation",
                "src": "98:154:37",
                "text": "@title LibUtils\n @author Connext <support@connext.network>\n @notice Contains a helper to revert if a call was not successfully\n         made"
              },
              "fullyImplemented": true,
              "id": 4786,
              "linearizedBaseContracts": [
                4786
              ],
              "name": "LibUtils",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4784,
                    "nodeType": "Block",
                    "src": "445:143:37",
                    "statements": [
                      {
                        "condition": {
                          "id": 4780,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "459:8:37",
                          "subExpression": {
                            "id": 4779,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4774,
                            "src": "460:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4783,
                        "nodeType": "IfStatement",
                        "src": "455:127:37",
                        "trueBody": {
                          "id": 4782,
                          "nodeType": "Block",
                          "src": "469:113:37",
                          "statements": [
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "492:80:37",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "returnData",
                                              "nodeType": "YulIdentifier",
                                              "src": "521:10:37"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "533:4:37",
                                              "type": "",
                                              "value": "0x20"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "517:3:37"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "517:21:37"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "returnData",
                                              "nodeType": "YulIdentifier",
                                              "src": "546:10:37"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "540:5:37"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "540:17:37"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "510:6:37"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "510:48:37"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "510:48:37"
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 4776,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "521:10:37",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 4776,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "546:10:37",
                                  "valueSize": 1
                                }
                              ],
                              "id": 4781,
                              "nodeType": "InlineAssembly",
                              "src": "483:89:37"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 4785,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revertIfCallFailed",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4777,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4774,
                        "mutability": "mutable",
                        "name": "success",
                        "nodeType": "VariableDeclaration",
                        "scope": 4785,
                        "src": "372:12:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4773,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "372:4:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4776,
                        "mutability": "mutable",
                        "name": "returnData",
                        "nodeType": "VariableDeclaration",
                        "scope": 4785,
                        "src": "386:23:37",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4775,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "386:5:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "371:39:37"
                  },
                  "returnParameters": {
                    "id": 4778,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "445:0:37"
                  },
                  "scope": 4786,
                  "src": "344:244:37",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4787,
              "src": "252:338:37"
            }
          ],
          "src": "39:552:37"
        },
        "id": 37
      },
      "src.sol/testing/FailingToken.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/FailingToken.sol",
          "exportedSymbols": {
            "FailingToken": [
              4972
            ]
          },
          "id": 4973,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4788,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:38"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "id": 4789,
              "nodeType": "ImportDirective",
              "scope": 4973,
              "sourceUnit": 1077,
              "src": "58:55:38",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 4790,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1076,
                    "src": "310:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1076",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 4791,
                  "nodeType": "InheritanceSpecifier",
                  "src": "310:5:38"
                }
              ],
              "contractDependencies": [
                22,
                1076,
                1154
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 4972,
              "linearizedBaseContracts": [
                4972,
                1076,
                1154,
                22
              ],
              "name": "FailingToken",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "9299dc73",
                  "id": 4793,
                  "mutability": "mutable",
                  "name": "transferShouldRevert",
                  "nodeType": "VariableDeclaration",
                  "scope": 4972,
                  "src": "322:32:38",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4792,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "322:4:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "ff0a8570",
                  "id": 4795,
                  "mutability": "mutable",
                  "name": "transferShouldFail",
                  "nodeType": "VariableDeclaration",
                  "scope": 4972,
                  "src": "360:30:38",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4794,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "360:4:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "805c44ae",
                  "id": 4797,
                  "mutability": "mutable",
                  "name": "rejectEther",
                  "nodeType": "VariableDeclaration",
                  "scope": 4972,
                  "src": "396:23:38",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4796,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "396:4:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4814,
                    "nodeType": "Block",
                    "src": "471:86:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 4806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4804,
                            "name": "transferShouldRevert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4793,
                            "src": "481:20:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 4805,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "504:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "481:27:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4807,
                        "nodeType": "ExpressionStatement",
                        "src": "481:27:38"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4809,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "524:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4810,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "524:10:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "hexValue": "31303030303030",
                              "id": 4811,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "536:13:38",
                              "subdenomination": "ether",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000000000"
                              },
                              "value": "1000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_rational_1000000000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000000000"
                              }
                            ],
                            "id": 4808,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 952,
                            "src": "518:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "518:32:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4813,
                        "nodeType": "ExpressionStatement",
                        "src": "518:32:38"
                      }
                    ]
                  },
                  "id": 4815,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "hexValue": "4661696c696e6720546f6b656e",
                          "id": 4800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "446:15:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_4d4b01652cd37b89d145739bc37e13e628733698c63b74a5ca5d6a8b6f498904",
                            "typeString": "literal_string \"Failing Token\""
                          },
                          "value": "Failing Token"
                        },
                        {
                          "hexValue": "4641494c",
                          "id": 4801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "463:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_104dd4d86a34f57105fb7432669e2de5fd3102fcce4e2794553e45c52904bcde",
                            "typeString": "literal_string \"FAIL\""
                          },
                          "value": "FAIL"
                        }
                      ],
                      "id": 4802,
                      "modifierName": {
                        "id": 4799,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1076,
                        "src": "440:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$1076_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "440:30:38"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4798,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "437:2:38"
                  },
                  "returnParameters": {
                    "id": 4803,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "471:0:38"
                  },
                  "scope": 4972,
                  "src": "426:131:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4825,
                    "nodeType": "Block",
                    "src": "590:89:38",
                    "statements": [
                      {
                        "condition": {
                          "id": 4818,
                          "name": "rejectEther",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4797,
                          "src": "604:11:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4824,
                        "nodeType": "IfStatement",
                        "src": "600:73:38",
                        "trueBody": {
                          "id": 4823,
                          "nodeType": "Block",
                          "src": "617:56:38",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "45524332303a2045544845525f52454a4543544544",
                                    "id": 4820,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "638:23:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_04f356bf0e5602e71e54543ddd88500edfbe014480b9b3df671104af50572fc2",
                                      "typeString": "literal_string \"ERC20: ETHER_REJECTED\""
                                    },
                                    "value": "ERC20: ETHER_REJECTED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_04f356bf0e5602e71e54543ddd88500edfbe014480b9b3df671104af50572fc2",
                                      "typeString": "literal_string \"ERC20: ETHER_REJECTED\""
                                    }
                                  ],
                                  "id": 4819,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "631:6:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "631:31:38",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4822,
                              "nodeType": "ExpressionStatement",
                              "src": "631:31:38"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 4826,
                  "implemented": true,
                  "kind": "receive",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4816,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "570:2:38"
                  },
                  "returnParameters": {
                    "id": 4817,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "590:0:38"
                  },
                  "scope": 4972,
                  "src": "563:116:38",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 4838,
                    "nodeType": "Block",
                    "src": "741:39:38",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4834,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4828,
                              "src": "757:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4835,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4830,
                              "src": "766:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4833,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 952,
                            "src": "751:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "751:22:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4837,
                        "nodeType": "ExpressionStatement",
                        "src": "751:22:38"
                      }
                    ]
                  },
                  "functionSelector": "40c10f19",
                  "id": 4839,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4831,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4828,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 4839,
                        "src": "699:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4827,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "699:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4830,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4839,
                        "src": "716:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4829,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "716:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "698:33:38"
                  },
                  "returnParameters": {
                    "id": 4832,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "741:0:38"
                  },
                  "scope": 4972,
                  "src": "685:95:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 4851,
                    "nodeType": "Block",
                    "src": "842:39:38",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4847,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4841,
                              "src": "858:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4848,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4843,
                              "src": "867:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4846,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1008,
                            "src": "852:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "852:22:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4850,
                        "nodeType": "ExpressionStatement",
                        "src": "852:22:38"
                      }
                    ]
                  },
                  "functionSelector": "9dc29fac",
                  "id": 4852,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4844,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4841,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 4852,
                        "src": "800:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4840,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "800:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4843,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4852,
                        "src": "817:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4842,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "817:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "799:33:38"
                  },
                  "returnParameters": {
                    "id": 4845,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "842:0:38"
                  },
                  "scope": 4972,
                  "src": "786:95:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    697
                  ],
                  "body": {
                    "id": 4880,
                    "nodeType": "Block",
                    "src": "999:216:38",
                    "statements": [
                      {
                        "condition": {
                          "id": 4862,
                          "name": "transferShouldRevert",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4793,
                          "src": "1013:20:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4868,
                        "nodeType": "IfStatement",
                        "src": "1009:80:38",
                        "trueBody": {
                          "id": 4867,
                          "nodeType": "Block",
                          "src": "1035:54:38",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "4641494c3a204661696c696e6720746f6b656e",
                                    "id": 4864,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1056:21:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_660fd5174a460228c5dc17690650c9651f79a7ad213977fb612f5a909faf1637",
                                      "typeString": "literal_string \"FAIL: Failing token\""
                                    },
                                    "value": "FAIL: Failing token"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_660fd5174a460228c5dc17690650c9651f79a7ad213977fb612f5a909faf1637",
                                      "typeString": "literal_string \"FAIL: Failing token\""
                                    }
                                  ],
                                  "id": 4863,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "1049:6:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1049:29:38",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4866,
                              "nodeType": "ExpressionStatement",
                              "src": "1049:29:38"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "id": 4869,
                          "name": "transferShouldFail",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4795,
                          "src": "1102:18:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4873,
                        "nodeType": "IfStatement",
                        "src": "1098:61:38",
                        "trueBody": {
                          "id": 4872,
                          "nodeType": "Block",
                          "src": "1122:37:38",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 4870,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1143:5:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 4861,
                              "id": 4871,
                              "nodeType": "Return",
                              "src": "1136:12:38"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4876,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4854,
                              "src": "1190:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4877,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4856,
                              "src": "1201:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4874,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1175:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_FailingToken_$4972",
                                "typeString": "contract super FailingToken"
                              }
                            },
                            "id": 4875,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 697,
                            "src": "1175:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 4878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1175:33:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4861,
                        "id": 4879,
                        "nodeType": "Return",
                        "src": "1168:40:38"
                      }
                    ]
                  },
                  "functionSelector": "a9059cbb",
                  "id": 4881,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4858,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "963:8:38"
                  },
                  "parameters": {
                    "id": 4857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4854,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4881,
                        "src": "905:17:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4853,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "905:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4856,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4881,
                        "src": "924:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4855,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "924:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "904:35:38"
                  },
                  "returnParameters": {
                    "id": 4861,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4860,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4881,
                        "src": "989:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4859,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "989:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "988:6:38"
                  },
                  "scope": 4972,
                  "src": "887:328:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    774
                  ],
                  "body": {
                    "id": 4912,
                    "nodeType": "Block",
                    "src": "1355:228:38",
                    "statements": [
                      {
                        "condition": {
                          "id": 4893,
                          "name": "transferShouldRevert",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4793,
                          "src": "1369:20:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4899,
                        "nodeType": "IfStatement",
                        "src": "1365:80:38",
                        "trueBody": {
                          "id": 4898,
                          "nodeType": "Block",
                          "src": "1391:54:38",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "4641494c3a204661696c696e6720746f6b656e",
                                    "id": 4895,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1412:21:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_660fd5174a460228c5dc17690650c9651f79a7ad213977fb612f5a909faf1637",
                                      "typeString": "literal_string \"FAIL: Failing token\""
                                    },
                                    "value": "FAIL: Failing token"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_660fd5174a460228c5dc17690650c9651f79a7ad213977fb612f5a909faf1637",
                                      "typeString": "literal_string \"FAIL: Failing token\""
                                    }
                                  ],
                                  "id": 4894,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "1405:6:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4896,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1405:29:38",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4897,
                              "nodeType": "ExpressionStatement",
                              "src": "1405:29:38"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "id": 4900,
                          "name": "transferShouldFail",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4795,
                          "src": "1458:18:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4904,
                        "nodeType": "IfStatement",
                        "src": "1454:61:38",
                        "trueBody": {
                          "id": 4903,
                          "nodeType": "Block",
                          "src": "1478:37:38",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 4901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1499:5:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 4892,
                              "id": 4902,
                              "nodeType": "Return",
                              "src": "1492:12:38"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4907,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4883,
                              "src": "1550:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4908,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4885,
                              "src": "1558:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4909,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4887,
                              "src": "1569:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4905,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1531:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_FailingToken_$4972",
                                "typeString": "contract super FailingToken"
                              }
                            },
                            "id": 4906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 774,
                            "src": "1531:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) returns (bool)"
                            }
                          },
                          "id": 4910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1531:45:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4892,
                        "id": 4911,
                        "nodeType": "Return",
                        "src": "1524:52:38"
                      }
                    ]
                  },
                  "functionSelector": "23b872dd",
                  "id": 4913,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4889,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1331:8:38"
                  },
                  "parameters": {
                    "id": 4888,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4883,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1252:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4882,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1252:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4885,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1276:17:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4884,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1276:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4887,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1303:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4886,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1303:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1242:81:38"
                  },
                  "returnParameters": {
                    "id": 4892,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4891,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1349:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4890,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1349:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1348:6:38"
                  },
                  "scope": 4972,
                  "src": "1221:362:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4926,
                    "nodeType": "Block",
                    "src": "1692:98:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 4922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4920,
                            "name": "transferShouldRevert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4793,
                            "src": "1702:20:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4921,
                            "name": "_transferShouldRevert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4915,
                            "src": "1725:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1702:44:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4923,
                        "nodeType": "ExpressionStatement",
                        "src": "1702:44:38"
                      },
                      {
                        "expression": {
                          "id": 4924,
                          "name": "transferShouldRevert",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4793,
                          "src": "1763:20:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4919,
                        "id": 4925,
                        "nodeType": "Return",
                        "src": "1756:27:38"
                      }
                    ]
                  },
                  "functionSelector": "468c15a9",
                  "id": 4927,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTransferShouldRevert",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4916,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4915,
                        "mutability": "mutable",
                        "name": "_transferShouldRevert",
                        "nodeType": "VariableDeclaration",
                        "scope": 4927,
                        "src": "1622:26:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4914,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1622:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1621:28:38"
                  },
                  "returnParameters": {
                    "id": 4919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4918,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4927,
                        "src": "1682:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4917,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1682:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1681:6:38"
                  },
                  "scope": 4972,
                  "src": "1589:201:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4940,
                    "nodeType": "Block",
                    "src": "1895:92:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 4936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4934,
                            "name": "transferShouldFail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4795,
                            "src": "1905:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4935,
                            "name": "_transferShouldFail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4929,
                            "src": "1926:19:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1905:40:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4937,
                        "nodeType": "ExpressionStatement",
                        "src": "1905:40:38"
                      },
                      {
                        "expression": {
                          "id": 4938,
                          "name": "transferShouldFail",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4795,
                          "src": "1962:18:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4933,
                        "id": 4939,
                        "nodeType": "Return",
                        "src": "1955:25:38"
                      }
                    ]
                  },
                  "functionSelector": "0cf96c3b",
                  "id": 4941,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTransferShouldFail",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4929,
                        "mutability": "mutable",
                        "name": "_transferShouldFail",
                        "nodeType": "VariableDeclaration",
                        "scope": 4941,
                        "src": "1827:24:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4928,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1827:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1826:26:38"
                  },
                  "returnParameters": {
                    "id": 4933,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4932,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4941,
                        "src": "1885:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4931,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1885:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1884:6:38"
                  },
                  "scope": 4972,
                  "src": "1796:191:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4954,
                    "nodeType": "Block",
                    "src": "2058:71:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 4950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4948,
                            "name": "rejectEther",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4797,
                            "src": "2068:11:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4949,
                            "name": "_rejectEther",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4943,
                            "src": "2082:12:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2068:26:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4951,
                        "nodeType": "ExpressionStatement",
                        "src": "2068:26:38"
                      },
                      {
                        "expression": {
                          "id": 4952,
                          "name": "rejectEther",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4797,
                          "src": "2111:11:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4947,
                        "id": 4953,
                        "nodeType": "Return",
                        "src": "2104:18:38"
                      }
                    ]
                  },
                  "functionSelector": "c38b79ef",
                  "id": 4955,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setRejectEther",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4943,
                        "mutability": "mutable",
                        "name": "_rejectEther",
                        "nodeType": "VariableDeclaration",
                        "scope": 4955,
                        "src": "2017:17:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4942,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2017:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2016:19:38"
                  },
                  "returnParameters": {
                    "id": 4947,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4946,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4955,
                        "src": "2052:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4945,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2052:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2051:6:38"
                  },
                  "scope": 4972,
                  "src": "1993:136:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4970,
                    "nodeType": "Block",
                    "src": "2240:57:38",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4966,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4957,
                              "src": "2272:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4967,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4959,
                              "src": "2283:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4964,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "2257:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_FailingToken_$4972",
                                "typeString": "contract super FailingToken"
                              }
                            },
                            "id": 4965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 697,
                            "src": "2257:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 4968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2257:33:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4963,
                        "id": 4969,
                        "nodeType": "Return",
                        "src": "2250:40:38"
                      }
                    ]
                  },
                  "functionSelector": "1f7fbbee",
                  "id": 4971,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "succeedingTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4957,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 4971,
                        "src": "2163:17:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2163:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4959,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 4971,
                        "src": "2182:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4958,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2182:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2162:35:38"
                  },
                  "returnParameters": {
                    "id": 4963,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4962,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4971,
                        "src": "2230:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4961,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2230:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2229:6:38"
                  },
                  "scope": 4972,
                  "src": "2135:162:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 4973,
              "src": "285:2014:38"
            }
          ],
          "src": "33:2267:38"
        },
        "id": 38
      },
      "src.sol/testing/NonconformingToken.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/NonconformingToken.sol",
          "exportedSymbols": {
            "NonconformingToken": [
              5496
            ]
          },
          "id": 5497,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4974,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:39"
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
              "file": "@openzeppelin/contracts/math/SafeMath.sol",
              "id": 4975,
              "nodeType": "ImportDirective",
              "scope": 5497,
              "sourceUnit": 570,
              "src": "58:51:39",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 5496,
              "linearizedBaseContracts": [
                5496
              ],
              "name": "NonconformingToken",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 4978,
                  "libraryName": {
                    "id": 4976,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 569,
                    "src": "478:8:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$569",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "472:27:39",
                  "typeName": {
                    "id": 4977,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "491:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 4982,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nodeType": "VariableDeclaration",
                  "scope": 5496,
                  "src": "505:45:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 4981,
                    "keyType": {
                      "id": 4979,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "513:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "505:27:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 4980,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "524:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4988,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nodeType": "VariableDeclaration",
                  "scope": 5496,
                  "src": "557:67:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 4987,
                    "keyType": {
                      "id": 4983,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "565:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "557:47:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 4986,
                      "keyType": {
                        "id": 4984,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "584:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "576:27:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 4985,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "595:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4990,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 5496,
                  "src": "631:28:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "631:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4992,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 5496,
                  "src": "666:20:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4991,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "666:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4994,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 5496,
                  "src": "692:22:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4993,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "692:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4996,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 5496,
                  "src": "720:23:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4995,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "720:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 4997,
                    "nodeType": "StructuredDocumentation",
                    "src": "750:158:39",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 5005,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5004,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4999,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5005,
                        "src": "928:20:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4998,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "928:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5001,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5005,
                        "src": "950:18:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5000,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "950:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5003,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 5005,
                        "src": "970:13:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5002,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "970:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "927:57:39"
                  },
                  "src": "913:72:39"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 5006,
                    "nodeType": "StructuredDocumentation",
                    "src": "991:148:39",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 5014,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5013,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5008,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5014,
                        "src": "1168:21:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5007,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1168:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5010,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5014,
                        "src": "1199:23:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5009,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1199:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5012,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 5014,
                        "src": "1232:13:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5011,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1232:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1158:93:39"
                  },
                  "src": "1144:108:39"
                },
                {
                  "body": {
                    "id": 5036,
                    "nodeType": "Block",
                    "src": "1588:138:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 5020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5018,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4992,
                            "src": "1598:5:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "4e6f6e636f6e666f726d696e6720546f6b656e",
                            "id": 5019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1606:21:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_100b1723a0bb114022aadb5513c5ff50a4444a065297cb1cda145a3f09af666e",
                              "typeString": "literal_string \"Nonconforming Token\""
                            },
                            "value": "Nonconforming Token"
                          },
                          "src": "1598:29:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 5021,
                        "nodeType": "ExpressionStatement",
                        "src": "1598:29:39"
                      },
                      {
                        "expression": {
                          "id": 5024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5022,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4994,
                            "src": "1637:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "55534454",
                            "id": 5023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1647:6:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d0",
                              "typeString": "literal_string \"USDT\""
                            },
                            "value": "USDT"
                          },
                          "src": "1637:16:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 5025,
                        "nodeType": "ExpressionStatement",
                        "src": "1637:16:39"
                      },
                      {
                        "expression": {
                          "id": 5028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5026,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4996,
                            "src": "1663:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "3138",
                            "id": 5027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1675:2:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          },
                          "src": "1663:14:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 5029,
                        "nodeType": "ExpressionStatement",
                        "src": "1663:14:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 5031,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1693:3:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1693:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "hexValue": "31303030303030",
                              "id": 5033,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1705:13:39",
                              "subdenomination": "ether",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000000000"
                              },
                              "value": "1000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_rational_1000000000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000000000"
                              }
                            ],
                            "id": 5030,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5346,
                            "src": "1687:5:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1687:32:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5035,
                        "nodeType": "ExpressionStatement",
                        "src": "1687:32:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5015,
                    "nodeType": "StructuredDocumentation",
                    "src": "1258:311:39",
                    "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                  },
                  "id": 5037,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5016,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1585:2:39"
                  },
                  "returnParameters": {
                    "id": 5017,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1588:0:39"
                  },
                  "scope": 5496,
                  "src": "1574:152:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5045,
                    "nodeType": "Block",
                    "src": "1843:29:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 5043,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4992,
                          "src": "1860:5:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 5042,
                        "id": 5044,
                        "nodeType": "Return",
                        "src": "1853:12:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5038,
                    "nodeType": "StructuredDocumentation",
                    "src": "1732:54:39",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 5046,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5039,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1804:2:39"
                  },
                  "returnParameters": {
                    "id": 5042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5041,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5046,
                        "src": "1828:13:39",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5040,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1828:6:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1827:15:39"
                  },
                  "scope": 5496,
                  "src": "1791:81:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5054,
                    "nodeType": "Block",
                    "src": "2039:31:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 5052,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4994,
                          "src": "2056:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 5051,
                        "id": 5053,
                        "nodeType": "Return",
                        "src": "2049:14:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5047,
                    "nodeType": "StructuredDocumentation",
                    "src": "1878:102:39",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 5055,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5048,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2000:2:39"
                  },
                  "returnParameters": {
                    "id": 5051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5050,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5055,
                        "src": "2024:13:39",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5049,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2024:6:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2023:15:39"
                  },
                  "scope": 5496,
                  "src": "1985:85:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5063,
                    "nodeType": "Block",
                    "src": "2741:33:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 5061,
                          "name": "_decimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4996,
                          "src": "2758:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 5060,
                        "id": 5062,
                        "nodeType": "Return",
                        "src": "2751:16:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5056,
                    "nodeType": "StructuredDocumentation",
                    "src": "2076:612:39",
                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                  },
                  "functionSelector": "313ce567",
                  "id": 5064,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5057,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2710:2:39"
                  },
                  "returnParameters": {
                    "id": 5060,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5059,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5064,
                        "src": "2734:5:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5058,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "2734:5:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2733:7:39"
                  },
                  "scope": 5496,
                  "src": "2693:81:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5072,
                    "nodeType": "Block",
                    "src": "2887:36:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 5070,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4990,
                          "src": "2904:12:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5069,
                        "id": 5071,
                        "nodeType": "Return",
                        "src": "2897:19:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5065,
                    "nodeType": "StructuredDocumentation",
                    "src": "2780:49:39",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 5073,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5066,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2854:2:39"
                  },
                  "returnParameters": {
                    "id": 5069,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5068,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5073,
                        "src": "2878:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5067,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2878:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2877:9:39"
                  },
                  "scope": 5496,
                  "src": "2834:89:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5085,
                    "nodeType": "Block",
                    "src": "3047:42:39",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 5081,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4982,
                            "src": "3064:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5083,
                          "indexExpression": {
                            "id": 5082,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5076,
                            "src": "3074:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3064:18:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5080,
                        "id": 5084,
                        "nodeType": "Return",
                        "src": "3057:25:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5074,
                    "nodeType": "StructuredDocumentation",
                    "src": "2929:47:39",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 5086,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5076,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5086,
                        "src": "3000:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5075,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3000:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2999:17:39"
                  },
                  "returnParameters": {
                    "id": 5080,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5079,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5086,
                        "src": "3038:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5078,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3038:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3037:9:39"
                  },
                  "scope": 5496,
                  "src": "2981:108:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5101,
                    "nodeType": "Block",
                    "src": "3360:57:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 5095,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3380:3:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3380:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5097,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5089,
                              "src": "3392:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5098,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5091,
                              "src": "3403:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5094,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5291,
                            "src": "3370:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3370:40:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5100,
                        "nodeType": "ExpressionStatement",
                        "src": "3370:40:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5087,
                    "nodeType": "StructuredDocumentation",
                    "src": "3095:192:39",
                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 5102,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5092,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5089,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5102,
                        "src": "3310:17:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5088,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3310:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5091,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5102,
                        "src": "3329:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5090,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3329:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3309:35:39"
                  },
                  "returnParameters": {
                    "id": 5093,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3360:0:39"
                  },
                  "scope": 5496,
                  "src": "3292:125:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5118,
                    "nodeType": "Block",
                    "src": "3600:51:39",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5112,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4988,
                              "src": "3617:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 5114,
                            "indexExpression": {
                              "id": 5113,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5105,
                              "src": "3629:5:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3617:18:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5116,
                          "indexExpression": {
                            "id": 5115,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5107,
                            "src": "3636:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3617:27:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5111,
                        "id": 5117,
                        "nodeType": "Return",
                        "src": "3610:34:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5103,
                    "nodeType": "StructuredDocumentation",
                    "src": "3423:47:39",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 5119,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5105,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5119,
                        "src": "3494:13:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3494:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5107,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5119,
                        "src": "3509:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5106,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3509:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3493:32:39"
                  },
                  "returnParameters": {
                    "id": 5111,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5110,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5119,
                        "src": "3587:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5109,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3587:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3586:9:39"
                  },
                  "scope": 5496,
                  "src": "3475:176:39",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5134,
                    "nodeType": "Block",
                    "src": "3854:54:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 5128,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3873:3:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3873:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5130,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5122,
                              "src": "3885:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5131,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5124,
                              "src": "3894:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5127,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5447,
                            "src": "3864:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3864:37:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5133,
                        "nodeType": "ExpressionStatement",
                        "src": "3864:37:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5120,
                    "nodeType": "StructuredDocumentation",
                    "src": "3657:127:39",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 5135,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5125,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5122,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5135,
                        "src": "3806:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5121,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3806:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5124,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5135,
                        "src": "3823:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5123,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3823:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3805:33:39"
                  },
                  "returnParameters": {
                    "id": 5126,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3854:0:39"
                  },
                  "scope": 5496,
                  "src": "3789:119:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5167,
                    "nodeType": "Block",
                    "src": "4493:272:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5146,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5138,
                              "src": "4513:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5147,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5140,
                              "src": "4521:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5148,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5142,
                              "src": "4532:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5145,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5291,
                            "src": "4503:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4503:36:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5150,
                        "nodeType": "ExpressionStatement",
                        "src": "4503:36:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5152,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5138,
                              "src": "4571:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 5153,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "4591:3:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "4591:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5162,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5142,
                                  "src": "4668:6:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                  "id": 5163,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4692:42:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  },
                                  "value": "ERC20: transfer amount exceeds allowance"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 5155,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4988,
                                      "src": "4615:11:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 5157,
                                    "indexExpression": {
                                      "id": 5156,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5138,
                                      "src": "4627:6:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4615:19:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 5160,
                                  "indexExpression": {
                                    "expression": {
                                      "id": 5158,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "4635:3:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 5159,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "4635:10:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4615:31:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5161,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 447,
                                "src": "4615:35:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 5164,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4615:133:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5151,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5447,
                            "src": "4549:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4549:209:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5166,
                        "nodeType": "ExpressionStatement",
                        "src": "4549:209:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5136,
                    "nodeType": "StructuredDocumentation",
                    "src": "3914:456:39",
                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                  },
                  "functionSelector": "23b872dd",
                  "id": 5168,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5138,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5168,
                        "src": "4406:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5137,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4406:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5140,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5168,
                        "src": "4430:17:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5139,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4430:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5142,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5168,
                        "src": "4457:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5141,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4457:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4396:81:39"
                  },
                  "returnParameters": {
                    "id": 5144,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4493:0:39"
                  },
                  "scope": 5496,
                  "src": "4375:390:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5195,
                    "nodeType": "Block",
                    "src": "5282:163:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 5179,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "5314:3:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "5314:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5181,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5171,
                              "src": "5338:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5189,
                                  "name": "addedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5173,
                                  "src": "5396:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 5182,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4988,
                                      "src": "5359:11:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 5185,
                                    "indexExpression": {
                                      "expression": {
                                        "id": 5183,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "5371:3:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 5184,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "5371:10:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5359:23:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 5187,
                                  "indexExpression": {
                                    "id": 5186,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5171,
                                    "src": "5383:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5359:32:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 402,
                                "src": "5359:36:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5359:48:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5178,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5447,
                            "src": "5292:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5292:125:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5192,
                        "nodeType": "ExpressionStatement",
                        "src": "5292:125:39"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5434:4:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5177,
                        "id": 5194,
                        "nodeType": "Return",
                        "src": "5427:11:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5169,
                    "nodeType": "StructuredDocumentation",
                    "src": "4771:384:39",
                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "39509351",
                  "id": 5196,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5174,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5171,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5196,
                        "src": "5187:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5170,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5187:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5173,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 5196,
                        "src": "5204:18:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5172,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5204:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5186:37:39"
                  },
                  "returnParameters": {
                    "id": 5177,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5176,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5196,
                        "src": "5272:4:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5175,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5272:4:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5271:6:39"
                  },
                  "scope": 5496,
                  "src": "5160:285:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5224,
                    "nodeType": "Block",
                    "src": "6059:255:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 5207,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "6091:3:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "6091:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5209,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5199,
                              "src": "6115:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5217,
                                  "name": "subtractedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5201,
                                  "src": "6190:15:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 5218,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6223:39:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  },
                                  "value": "ERC20: decreased allowance below zero"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 5210,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4988,
                                      "src": "6136:11:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 5213,
                                    "indexExpression": {
                                      "expression": {
                                        "id": 5211,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "6148:3:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 5212,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "6148:10:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6136:23:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 5215,
                                  "indexExpression": {
                                    "id": 5214,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5199,
                                    "src": "6160:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6136:32:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 447,
                                "src": "6136:36:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 5219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6136:140:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5206,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5447,
                            "src": "6069:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6069:217:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5221,
                        "nodeType": "ExpressionStatement",
                        "src": "6069:217:39"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6303:4:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5205,
                        "id": 5223,
                        "nodeType": "Return",
                        "src": "6296:11:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5197,
                    "nodeType": "StructuredDocumentation",
                    "src": "5451:476:39",
                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                  },
                  "functionSelector": "a457c2d7",
                  "id": 5225,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5199,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5225,
                        "src": "5959:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5198,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5959:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5201,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 5225,
                        "src": "5976:23:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5976:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5958:42:39"
                  },
                  "returnParameters": {
                    "id": 5205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5204,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5225,
                        "src": "6049:4:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5203,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6049:4:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6048:6:39"
                  },
                  "scope": 5496,
                  "src": "5932:382:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5290,
                    "nodeType": "Block",
                    "src": "6905:477:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5241,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5236,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5228,
                                "src": "6923:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5239,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6941:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5238,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6933:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5237,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6933:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5240,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6933:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "6923:20:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 5242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6945:39:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              },
                              "value": "ERC20: transfer from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              }
                            ],
                            "id": 5235,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6915:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6915:70:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5244,
                        "nodeType": "ExpressionStatement",
                        "src": "6915:70:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5246,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5230,
                                "src": "7003:9:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5249,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7024:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7016:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5247,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7016:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5250,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7016:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7003:23:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 5252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7028:37:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              },
                              "value": "ERC20: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              }
                            ],
                            "id": 5245,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6995:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6995:71:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5254,
                        "nodeType": "ExpressionStatement",
                        "src": "6995:71:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5256,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5228,
                              "src": "7098:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5257,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5230,
                              "src": "7106:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5258,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5232,
                              "src": "7117:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5255,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5469,
                            "src": "7077:20:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7077:47:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5260,
                        "nodeType": "ExpressionStatement",
                        "src": "7077:47:39"
                      },
                      {
                        "expression": {
                          "id": 5271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5261,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4982,
                              "src": "7135:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5263,
                            "indexExpression": {
                              "id": 5262,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5228,
                              "src": "7145:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7135:17:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5268,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5232,
                                "src": "7190:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                "id": 5269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7210:40:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                },
                                "value": "ERC20: transfer amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5264,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4982,
                                  "src": "7155:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5266,
                                "indexExpression": {
                                  "id": 5265,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5228,
                                  "src": "7165:6:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7155:17:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 447,
                              "src": "7155:21:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 5270,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7155:105:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7135:125:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5272,
                        "nodeType": "ExpressionStatement",
                        "src": "7135:125:39"
                      },
                      {
                        "expression": {
                          "id": 5282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5273,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4982,
                              "src": "7270:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5275,
                            "indexExpression": {
                              "id": 5274,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5230,
                              "src": "7280:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7270:20:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5280,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5232,
                                "src": "7318:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5276,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4982,
                                  "src": "7293:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5278,
                                "indexExpression": {
                                  "id": 5277,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5230,
                                  "src": "7303:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7293:20:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5279,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "7293:24:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5281,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7293:32:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7270:55:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5283,
                        "nodeType": "ExpressionStatement",
                        "src": "7270:55:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5285,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5228,
                              "src": "7349:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5286,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5230,
                              "src": "7357:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5287,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5232,
                              "src": "7368:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5284,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5005,
                            "src": "7340:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7340:35:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5289,
                        "nodeType": "EmitStatement",
                        "src": "7335:40:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5226,
                    "nodeType": "StructuredDocumentation",
                    "src": "6320:463:39",
                    "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                  },
                  "id": 5291,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5228,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5291,
                        "src": "6816:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5227,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6816:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5230,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5291,
                        "src": "6840:17:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5229,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6840:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5232,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5291,
                        "src": "6867:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5231,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6867:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6806:81:39"
                  },
                  "returnParameters": {
                    "id": 5234,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6905:0:39"
                  },
                  "scope": 5496,
                  "src": "6788:594:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5345,
                    "nodeType": "Block",
                    "src": "7718:305:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5300,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5294,
                                "src": "7736:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5303,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7755:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5302,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7747:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5301,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7747:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7747:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7736:21:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 5306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7759:33:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              },
                              "value": "ERC20: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              }
                            ],
                            "id": 5299,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7728:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7728:65:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5308,
                        "nodeType": "ExpressionStatement",
                        "src": "7728:65:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5312,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7833:1:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7825:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5310,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7825:7:39",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7825:10:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5314,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5294,
                              "src": "7837:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5315,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5296,
                              "src": "7846:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5309,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5469,
                            "src": "7804:20:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7804:49:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5317,
                        "nodeType": "ExpressionStatement",
                        "src": "7804:49:39"
                      },
                      {
                        "expression": {
                          "id": 5323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5318,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4990,
                            "src": "7864:12:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5321,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5296,
                                "src": "7896:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5319,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4990,
                                "src": "7879:12:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5320,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "7879:16:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5322,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7879:24:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7864:39:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5324,
                        "nodeType": "ExpressionStatement",
                        "src": "7864:39:39"
                      },
                      {
                        "expression": {
                          "id": 5334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5325,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4982,
                              "src": "7913:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5327,
                            "indexExpression": {
                              "id": 5326,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5294,
                              "src": "7923:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7913:18:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5332,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5296,
                                "src": "7957:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5328,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4982,
                                  "src": "7934:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5330,
                                "indexExpression": {
                                  "id": 5329,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5294,
                                  "src": "7944:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7934:18:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 402,
                              "src": "7934:22:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7934:30:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7913:51:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5335,
                        "nodeType": "ExpressionStatement",
                        "src": "7913:51:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5339,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7996:1:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5338,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7988:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5337,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7988:7:39",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7988:10:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5341,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5294,
                              "src": "8000:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5342,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5296,
                              "src": "8009:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5336,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5005,
                            "src": "7979:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7979:37:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5344,
                        "nodeType": "EmitStatement",
                        "src": "7974:42:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5292,
                    "nodeType": "StructuredDocumentation",
                    "src": "7388:260:39",
                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."
                  },
                  "id": 5346,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5297,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5294,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5346,
                        "src": "7668:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5293,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7668:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5296,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5346,
                        "src": "7685:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5295,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7685:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7667:33:39"
                  },
                  "returnParameters": {
                    "id": 5298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7718:0:39"
                  },
                  "scope": 5496,
                  "src": "7653:370:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5401,
                    "nodeType": "Block",
                    "src": "8408:379:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5355,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5349,
                                "src": "8426:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5358,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8445:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5357,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8437:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5356,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8437:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5359,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8437:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "8426:21:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 5361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8449:35:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              },
                              "value": "ERC20: burn from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              }
                            ],
                            "id": 5354,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8418:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8418:67:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5363,
                        "nodeType": "ExpressionStatement",
                        "src": "8418:67:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5365,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5349,
                              "src": "8517:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5368,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8534:1:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8526:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5366,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8526:7:39",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8526:10:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5370,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5351,
                              "src": "8538:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5364,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5469,
                            "src": "8496:20:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8496:49:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5372,
                        "nodeType": "ExpressionStatement",
                        "src": "8496:49:39"
                      },
                      {
                        "expression": {
                          "id": 5383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5373,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4982,
                              "src": "8556:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5375,
                            "indexExpression": {
                              "id": 5374,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5349,
                              "src": "8566:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8556:18:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5380,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5351,
                                "src": "8613:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                "id": 5381,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8633:36:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                },
                                "value": "ERC20: burn amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5376,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4982,
                                  "src": "8577:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5378,
                                "indexExpression": {
                                  "id": 5377,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5349,
                                  "src": "8587:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8577:18:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 447,
                              "src": "8577:22:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 5382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8577:102:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8556:123:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5384,
                        "nodeType": "ExpressionStatement",
                        "src": "8556:123:39"
                      },
                      {
                        "expression": {
                          "id": 5390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5385,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4990,
                            "src": "8689:12:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5388,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5351,
                                "src": "8721:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5386,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4990,
                                "src": "8704:12:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5387,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 419,
                              "src": "8704:16:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8704:24:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8689:39:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5391,
                        "nodeType": "ExpressionStatement",
                        "src": "8689:39:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5393,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5349,
                              "src": "8752:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5396,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8769:1:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5395,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8761:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5394,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8761:7:39",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5397,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8761:10:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5398,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5351,
                              "src": "8773:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5392,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5005,
                            "src": "8743:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8743:37:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5400,
                        "nodeType": "EmitStatement",
                        "src": "8738:42:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5347,
                    "nodeType": "StructuredDocumentation",
                    "src": "8029:309:39",
                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                  },
                  "id": 5402,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5349,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5402,
                        "src": "8358:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5348,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8358:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5351,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5402,
                        "src": "8375:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5350,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8375:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8357:33:39"
                  },
                  "returnParameters": {
                    "id": 5353,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8408:0:39"
                  },
                  "scope": 5496,
                  "src": "8343:444:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5446,
                    "nodeType": "Block",
                    "src": "9323:257:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5418,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5413,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5405,
                                "src": "9341:5:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5416,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9358:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5415,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9350:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5414,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9350:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9350:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "9341:19:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 5419,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9362:38:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              },
                              "value": "ERC20: approve from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              }
                            ],
                            "id": 5412,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9333:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9333:68:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5421,
                        "nodeType": "ExpressionStatement",
                        "src": "9333:68:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5423,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5407,
                                "src": "9419:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5426,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9438:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5425,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9430:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5424,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9430:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9430:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "9419:21:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 5429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9442:36:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              },
                              "value": "ERC20: approve to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              }
                            ],
                            "id": 5422,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9411:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9411:68:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5431,
                        "nodeType": "ExpressionStatement",
                        "src": "9411:68:39"
                      },
                      {
                        "expression": {
                          "id": 5438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5432,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4988,
                                "src": "9490:11:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 5435,
                              "indexExpression": {
                                "id": 5433,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5405,
                                "src": "9502:5:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9490:18:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5436,
                            "indexExpression": {
                              "id": 5434,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "9509:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9490:27:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5437,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5409,
                            "src": "9520:6:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9490:36:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5439,
                        "nodeType": "ExpressionStatement",
                        "src": "9490:36:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5441,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5405,
                              "src": "9550:5:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5442,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "9557:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5443,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5409,
                              "src": "9566:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5440,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5014,
                            "src": "9541:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9541:32:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5445,
                        "nodeType": "EmitStatement",
                        "src": "9536:37:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5403,
                    "nodeType": "StructuredDocumentation",
                    "src": "8793:412:39",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                  },
                  "id": 5447,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5410,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5405,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5447,
                        "src": "9237:13:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5404,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9237:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5407,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5447,
                        "src": "9260:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5406,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9260:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5409,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5447,
                        "src": "9285:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5408,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9285:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9227:78:39"
                  },
                  "returnParameters": {
                    "id": 5411,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9323:0:39"
                  },
                  "scope": 5496,
                  "src": "9210:370:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5457,
                    "nodeType": "Block",
                    "src": "9953:38:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 5455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5453,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4996,
                            "src": "9963:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5454,
                            "name": "decimals_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5450,
                            "src": "9975:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "9963:21:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 5456,
                        "nodeType": "ExpressionStatement",
                        "src": "9963:21:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5448,
                    "nodeType": "StructuredDocumentation",
                    "src": "9586:312:39",
                    "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                  },
                  "id": 5458,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setupDecimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5451,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5450,
                        "mutability": "mutable",
                        "name": "decimals_",
                        "nodeType": "VariableDeclaration",
                        "scope": 5458,
                        "src": "9927:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5449,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "9927:5:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9926:17:39"
                  },
                  "returnParameters": {
                    "id": 5452,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9953:0:39"
                  },
                  "scope": 5496,
                  "src": "9903:88:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5468,
                    "nodeType": "Block",
                    "src": "10697:2:39",
                    "statements": []
                  },
                  "documentation": {
                    "id": 5459,
                    "nodeType": "StructuredDocumentation",
                    "src": "9997:576:39",
                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 5469,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5461,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5469,
                        "src": "10617:12:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5460,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10617:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5463,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5469,
                        "src": "10639:10:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5462,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10639:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5465,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5469,
                        "src": "10659:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5464,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10659:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10607:72:39"
                  },
                  "returnParameters": {
                    "id": 5467,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10697:0:39"
                  },
                  "scope": 5496,
                  "src": "10578:121:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5481,
                    "nodeType": "Block",
                    "src": "10761:39:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5477,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5471,
                              "src": "10777:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5478,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5473,
                              "src": "10786:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5476,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5346,
                            "src": "10771:5:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10771:22:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5480,
                        "nodeType": "ExpressionStatement",
                        "src": "10771:22:39"
                      }
                    ]
                  },
                  "functionSelector": "40c10f19",
                  "id": 5482,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5471,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5482,
                        "src": "10719:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5470,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10719:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5473,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5482,
                        "src": "10736:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5472,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10736:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10718:33:39"
                  },
                  "returnParameters": {
                    "id": 5475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10761:0:39"
                  },
                  "scope": 5496,
                  "src": "10705:95:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5494,
                    "nodeType": "Block",
                    "src": "10862:39:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5490,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5484,
                              "src": "10878:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5491,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5486,
                              "src": "10887:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5489,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5402,
                            "src": "10872:5:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10872:22:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5493,
                        "nodeType": "ExpressionStatement",
                        "src": "10872:22:39"
                      }
                    ]
                  },
                  "functionSelector": "9dc29fac",
                  "id": 5495,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5487,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5484,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5495,
                        "src": "10820:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5483,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10820:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5486,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5495,
                        "src": "10837:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5485,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10837:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10819:33:39"
                  },
                  "returnParameters": {
                    "id": 5488,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10862:0:39"
                  },
                  "scope": 5496,
                  "src": "10806:95:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5497,
              "src": "438:10465:39"
            }
          ],
          "src": "33:10871:39"
        },
        "id": 39
      },
      "src.sol/testing/ReentrantToken.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/ReentrantToken.sol",
          "exportedSymbols": {
            "ReentrantToken": [
              5563
            ]
          },
          "id": 5564,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5498,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:40"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "id": 5499,
              "nodeType": "ImportDirective",
              "scope": 5564,
              "sourceUnit": 1077,
              "src": "57:55:40",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/IVectorChannel.sol",
              "file": "../interfaces/IVectorChannel.sol",
              "id": 5500,
              "nodeType": "ImportDirective",
              "scope": 5564,
              "sourceUnit": 4012,
              "src": "113:42:40",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5501,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1076,
                    "src": "184:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1076",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 5502,
                  "nodeType": "InheritanceSpecifier",
                  "src": "184:5:40"
                }
              ],
              "contractDependencies": [
                22,
                1076,
                1154
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 5563,
              "linearizedBaseContracts": [
                5563,
                1076,
                1154,
                22
              ],
              "name": "ReentrantToken",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 5504,
                  "mutability": "immutable",
                  "name": "channel",
                  "nodeType": "VariableDeclaration",
                  "scope": 5563,
                  "src": "196:33:40",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5503,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "196:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 5517,
                    "nodeType": "Block",
                    "src": "301:35:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 5515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5513,
                            "name": "channel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5504,
                            "src": "311:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5514,
                            "name": "_channel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5506,
                            "src": "321:8:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "311:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5516,
                        "nodeType": "ExpressionStatement",
                        "src": "311:18:40"
                      }
                    ]
                  },
                  "id": 5518,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "hexValue": "5265656e7472616e7420546f6b656e",
                          "id": 5509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "272:17:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_2fc8d98f0e530ae20ac23d826a951a47cbbe04d393e6384121fe1af17554c531",
                            "typeString": "literal_string \"Reentrant Token\""
                          },
                          "value": "Reentrant Token"
                        },
                        {
                          "hexValue": "424144424f49",
                          "id": 5510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "291:8:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_9e3759d0582fee1be30ed04247b7c1e7836dc8da42a2b3e4fc2fafb3d113485c",
                            "typeString": "literal_string \"BADBOI\""
                          },
                          "value": "BADBOI"
                        }
                      ],
                      "id": 5511,
                      "modifierName": {
                        "id": 5508,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1076,
                        "src": "266:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$1076_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "266:34:40"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5507,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5506,
                        "mutability": "mutable",
                        "name": "_channel",
                        "nodeType": "VariableDeclaration",
                        "scope": 5518,
                        "src": "248:16:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5505,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "248:7:40",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "247:18:40"
                  },
                  "returnParameters": {
                    "id": 5512,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "301:0:40"
                  },
                  "scope": 5563,
                  "src": "236:100:40",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5530,
                    "nodeType": "Block",
                    "src": "398:39:40",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5526,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5520,
                              "src": "414:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5527,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5522,
                              "src": "423:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5525,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 952,
                            "src": "408:5:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "408:22:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5529,
                        "nodeType": "ExpressionStatement",
                        "src": "408:22:40"
                      }
                    ]
                  },
                  "functionSelector": "40c10f19",
                  "id": 5531,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5523,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5520,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5531,
                        "src": "356:15:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5519,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "356:7:40",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5522,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5531,
                        "src": "373:14:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5521,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "373:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "355:33:40"
                  },
                  "returnParameters": {
                    "id": 5524,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "398:0:40"
                  },
                  "scope": 5563,
                  "src": "342:95:40",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    774
                  ],
                  "body": {
                    "id": 5561,
                    "nodeType": "Block",
                    "src": "640:138:40",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 5549,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "695:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ReentrantToken_$5563",
                                    "typeString": "contract ReentrantToken"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ReentrantToken_$5563",
                                    "typeString": "contract ReentrantToken"
                                  }
                                ],
                                "id": 5548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "687:7:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5547,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "687:7:40",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5550,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "687:13:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5551,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5537,
                              "src": "702:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5544,
                                  "name": "channel",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5504,
                                  "src": "665:7:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5543,
                                "name": "IVectorChannel",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4011,
                                "src": "650:14:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IVectorChannel_$4011_$",
                                  "typeString": "type(contract IVectorChannel)"
                                }
                              },
                              "id": 5545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "650:23:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IVectorChannel_$4011",
                                "typeString": "contract IVectorChannel"
                              }
                            },
                            "id": 5546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "depositAlice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3783,
                            "src": "650:36:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) payable external"
                            }
                          },
                          "id": 5552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "650:59:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5553,
                        "nodeType": "ExpressionStatement",
                        "src": "650:59:40"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5556,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5533,
                              "src": "745:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5557,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5535,
                              "src": "753:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5558,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5537,
                              "src": "764:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5554,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "726:5:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ReentrantToken_$5563",
                                "typeString": "contract super ReentrantToken"
                              }
                            },
                            "id": 5555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 774,
                            "src": "726:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) returns (bool)"
                            }
                          },
                          "id": 5559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "726:45:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 5542,
                        "id": 5560,
                        "nodeType": "Return",
                        "src": "719:52:40"
                      }
                    ]
                  },
                  "functionSelector": "23b872dd",
                  "id": 5562,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5539,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "616:8:40"
                  },
                  "parameters": {
                    "id": 5538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5533,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5562,
                        "src": "537:14:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5532,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "537:7:40",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5535,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5562,
                        "src": "561:17:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5534,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "561:7:40",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5537,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5562,
                        "src": "588:14:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5536,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "588:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "527:81:40"
                  },
                  "returnParameters": {
                    "id": 5542,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5541,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5562,
                        "src": "634:4:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5540,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "634:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "633:6:40"
                  },
                  "scope": 5563,
                  "src": "506:272:40",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 5564,
              "src": "157:623:40"
            }
          ],
          "src": "32:749:40"
        },
        "id": 40
      },
      "src.sol/testing/TestChannel.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/TestChannel.sol",
          "exportedSymbols": {
            "TestChannel": [
              5605
            ]
          },
          "id": 5606,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5565,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:41"
            },
            {
              "id": 5566,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:35:41"
            },
            {
              "absolutePath": "src.sol/ChannelMastercopy.sol",
              "file": "../ChannelMastercopy.sol",
              "id": 5567,
              "nodeType": "ImportDirective",
              "scope": 5606,
              "sourceUnit": 3392,
              "src": "100:34:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ITestChannel.sol",
              "file": "../interfaces/ITestChannel.sol",
              "id": 5568,
              "nodeType": "ImportDirective",
              "scope": 5606,
              "sourceUnit": 3903,
              "src": "135:40:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5570,
                    "name": "ChannelMastercopy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3391,
                    "src": "910:17:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ChannelMastercopy_$3391",
                      "typeString": "contract ChannelMastercopy"
                    }
                  },
                  "id": 5571,
                  "nodeType": "InheritanceSpecifier",
                  "src": "910:17:41"
                },
                {
                  "baseName": {
                    "id": 5572,
                    "name": "ITestChannel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3902,
                    "src": "929:12:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITestChannel_$3902",
                      "typeString": "contract ITestChannel"
                    }
                  },
                  "id": 5573,
                  "nodeType": "InheritanceSpecifier",
                  "src": "929:12:41"
                }
              ],
              "contractDependencies": [
                2322,
                2583,
                2713,
                2870,
                3081,
                3391,
                3442,
                3703,
                3732,
                3753,
                3784,
                3819,
                3902,
                4011
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 5569,
                "nodeType": "StructuredDocumentation",
                "src": "177:708:41",
                "text": "@title TestChannel\n @author Layne Haber <layne@connext.network>\n @notice This contract will help test the `ChannelMastercopy` contract and\n         the associated bits of functionality. This contract should *only*\n         contain aliases to internal functions that should be unit-tested,\n         like the `makeExitable` call on `CMCAsset.sol`. Using this\n         contract will help reduce the amount of boilerplate needed to test\n         component functionality. For example, `CMCAsset.sol` is only\n         able to be tested via the adjudicator in many practical cases.\n         Creating a helper function allows for easier testing of only\n         that functionality."
              },
              "fullyImplemented": true,
              "id": 5605,
              "linearizedBaseContracts": [
                5605,
                3902,
                3391,
                4011,
                2322,
                3703,
                3081,
                3819,
                2870,
                3784,
                2583,
                3732,
                2713,
                3753,
                3442
              ],
              "name": "TestChannel",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    3894
                  ],
                  "body": {
                    "id": 5589,
                    "nodeType": "Block",
                    "src": "1083:60:41",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5584,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5575,
                              "src": "1106:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5585,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5577,
                              "src": "1115:9:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5586,
                              "name": "maxAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5579,
                              "src": "1126:9:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5583,
                            "name": "makeExitable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2410,
                            "src": "1093:12:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1093:43:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5588,
                        "nodeType": "ExpressionStatement",
                        "src": "1093:43:41"
                      }
                    ]
                  },
                  "functionSelector": "c55e1dac",
                  "id": 5590,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testMakeExitable",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5581,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1074:8:41"
                  },
                  "parameters": {
                    "id": 5580,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5575,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5590,
                        "src": "983:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5574,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "983:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5577,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5590,
                        "src": "1008:25:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 5576,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1008:15:41",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5579,
                        "mutability": "mutable",
                        "name": "maxAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5590,
                        "src": "1043:17:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5578,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1043:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "973:93:41"
                  },
                  "returnParameters": {
                    "id": 5582,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1083:0:41"
                  },
                  "scope": 5605,
                  "src": "948:195:41",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3901
                  ],
                  "body": {
                    "id": 5603,
                    "nodeType": "Block",
                    "src": "1261:54:41",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5599,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5592,
                              "src": "1291:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5600,
                              "name": "balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "1300:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                "typeString": "struct Balance memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                "typeString": "struct Balance memory"
                              }
                            ],
                            "id": 5598,
                            "name": "makeBalanceExitable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2451,
                            "src": "1271:19:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Balance_$4023_memory_ptr_$returns$__$",
                              "typeString": "function (address,struct Balance memory)"
                            }
                          },
                          "id": 5601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1271:37:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5602,
                        "nodeType": "ExpressionStatement",
                        "src": "1271:37:41"
                      }
                    ]
                  },
                  "functionSelector": "7b037295",
                  "id": 5604,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testMakeBalanceExitable",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5596,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1252:8:41"
                  },
                  "parameters": {
                    "id": 5595,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5592,
                        "mutability": "mutable",
                        "name": "assetId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5604,
                        "src": "1191:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5591,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1191:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5594,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "scope": 5604,
                        "src": "1216:22:41",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 5593,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "1216:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1181:63:41"
                  },
                  "returnParameters": {
                    "id": 5597,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1261:0:41"
                  },
                  "scope": 5605,
                  "src": "1149:166:41",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 5606,
              "src": "886:431:41"
            }
          ],
          "src": "39:1279:41"
        },
        "id": 41
      },
      "src.sol/testing/TestChannelFactory.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/TestChannelFactory.sol",
          "exportedSymbols": {
            "TestChannelFactory": [
              5664
            ]
          },
          "id": 5665,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5607,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:42"
            },
            {
              "id": 5608,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:42"
            },
            {
              "absolutePath": "src.sol/interfaces/IVectorChannel.sol",
              "file": "../interfaces/IVectorChannel.sol",
              "id": 5609,
              "nodeType": "ImportDirective",
              "scope": 5665,
              "sourceUnit": 4012,
              "src": "98:42:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/ChannelFactory.sol",
              "file": "../ChannelFactory.sol",
              "id": 5610,
              "nodeType": "ImportDirective",
              "scope": 5665,
              "sourceUnit": 3369,
              "src": "141:31:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5612,
                    "name": "ChannelFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3368,
                    "src": "451:14:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ChannelFactory_$3368",
                      "typeString": "contract ChannelFactory"
                    }
                  },
                  "id": 5613,
                  "nodeType": "InheritanceSpecifier",
                  "src": "451:14:42"
                }
              ],
              "contractDependencies": [
                3368,
                3878
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 5611,
                "nodeType": "StructuredDocumentation",
                "src": "174:246:42",
                "text": "@title TestChannelFactory\n @author Layne Haber <layne@connext.network>\n @notice This factory is used for testing *ONLY* and allows you to\n         deploy contracts without setting them up (to run the CMCCore\n         setup tests)"
              },
              "fullyImplemented": true,
              "id": 5664,
              "linearizedBaseContracts": [
                5664,
                3368,
                3878
              ],
              "name": "TestChannelFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 5624,
                    "nodeType": "Block",
                    "src": "573:2:42",
                    "statements": []
                  },
                  "id": 5625,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 5620,
                          "name": "_mastercopy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5615,
                          "src": "546:11:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 5621,
                          "name": "_chainId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5617,
                          "src": "559:8:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 5622,
                      "modifierName": {
                        "id": 5619,
                        "name": "ChannelFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3368,
                        "src": "531:14:42",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ChannelFactory_$3368_$",
                          "typeString": "type(contract ChannelFactory)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "531:37:42"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5618,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5615,
                        "mutability": "mutable",
                        "name": "_mastercopy",
                        "nodeType": "VariableDeclaration",
                        "scope": 5625,
                        "src": "484:19:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5614,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "484:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5617,
                        "mutability": "mutable",
                        "name": "_chainId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5625,
                        "src": "505:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5616,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "505:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "483:39:42"
                  },
                  "returnParameters": {
                    "id": 5623,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "573:0:42"
                  },
                  "scope": 5664,
                  "src": "472:103:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5639,
                    "nodeType": "Block",
                    "src": "694:54:42",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5635,
                              "name": "alice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5627,
                              "src": "730:5:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5636,
                              "name": "bob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5629,
                              "src": "737:3:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5634,
                            "name": "deployChannelProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3346,
                            "src": "711:18:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,address) returns (address)"
                            }
                          },
                          "id": 5637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "711:30:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 5633,
                        "id": 5638,
                        "nodeType": "Return",
                        "src": "704:37:42"
                      }
                    ]
                  },
                  "functionSelector": "a25dbcc9",
                  "id": 5640,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deployChannelProxyWithoutSetup",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5627,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 5640,
                        "src": "621:13:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "621:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5629,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 5640,
                        "src": "636:11:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5628,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "636:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "620:28:42"
                  },
                  "returnParameters": {
                    "id": 5633,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5632,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5640,
                        "src": "681:7:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5631,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "681:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "680:9:42"
                  },
                  "scope": 5664,
                  "src": "581:167:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5662,
                    "nodeType": "Block",
                    "src": "870:120:42",
                    "statements": [
                      {
                        "expression": {
                          "id": 5654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5649,
                            "name": "channel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5647,
                            "src": "880:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5651,
                                "name": "alice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5642,
                                "src": "909:5:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 5652,
                                "name": "bob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5644,
                                "src": "916:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 5650,
                              "name": "deployChannelProxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3346,
                              "src": "890:18:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                                "typeString": "function (address,address) returns (address)"
                              }
                            },
                            "id": 5653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "890:30:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "880:40:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5655,
                        "nodeType": "ExpressionStatement",
                        "src": "880:40:42"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5657,
                              "name": "channel",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5647,
                              "src": "951:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5656,
                            "name": "ChannelCreation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3826,
                            "src": "935:15:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "935:24:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5659,
                        "nodeType": "EmitStatement",
                        "src": "930:29:42"
                      },
                      {
                        "expression": {
                          "id": 5660,
                          "name": "channel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5647,
                          "src": "976:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 5648,
                        "id": 5661,
                        "nodeType": "Return",
                        "src": "969:14:42"
                      }
                    ]
                  },
                  "functionSelector": "5b056cb5",
                  "id": 5663,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createChannelWithoutSetup",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5645,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5642,
                        "mutability": "mutable",
                        "name": "alice",
                        "nodeType": "VariableDeclaration",
                        "scope": 5663,
                        "src": "789:13:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5641,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "789:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5644,
                        "mutability": "mutable",
                        "name": "bob",
                        "nodeType": "VariableDeclaration",
                        "scope": 5663,
                        "src": "804:11:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5643,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "804:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "788:28:42"
                  },
                  "returnParameters": {
                    "id": 5648,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5647,
                        "mutability": "mutable",
                        "name": "channel",
                        "nodeType": "VariableDeclaration",
                        "scope": 5663,
                        "src": "849:15:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5646,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "849:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "848:17:42"
                  },
                  "scope": 5664,
                  "src": "754:236:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 5665,
              "src": "420:572:42"
            }
          ],
          "src": "39:954:42"
        },
        "id": 42
      },
      "src.sol/testing/TestLibIterableMapping.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/TestLibIterableMapping.sol",
          "exportedSymbols": {
            "TestLibIterableMapping": [
              5798
            ]
          },
          "id": 5799,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5666,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:43"
            },
            {
              "id": 5667,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:43"
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferRegistry.sol",
              "file": "../interfaces/ITransferRegistry.sol",
              "id": 5668,
              "nodeType": "ImportDirective",
              "scope": 5799,
              "sourceUnit": 3993,
              "src": "98:45:43",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibIterableMapping.sol",
              "file": "../lib/LibIterableMapping.sol",
              "id": 5669,
              "nodeType": "ImportDirective",
              "scope": 5799,
              "sourceUnit": 4736,
              "src": "144:39:43",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 5670,
                "nodeType": "StructuredDocumentation",
                "src": "185:221:43",
                "text": "@title TestLibIterableMapping\n @author Layne Haber <layne@connext.network>\n @notice Used to easily test the internal methods of\n         LibIterableMapping.sol by aliasing them to public\n         methods."
              },
              "fullyImplemented": true,
              "id": 5798,
              "linearizedBaseContracts": [
                5798
              ],
              "name": "TestLibIterableMapping",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 5673,
                  "libraryName": {
                    "id": 5671,
                    "name": "LibIterableMapping",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4735,
                    "src": "450:18:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibIterableMapping_$4735",
                      "typeString": "library LibIterableMapping"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "444:64:43",
                  "typeName": {
                    "id": 5672,
                    "name": "LibIterableMapping.IterableMapping",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4424,
                    "src": "473:34:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                      "typeString": "struct LibIterableMapping.IterableMapping"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 5675,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "514:39:43",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                    "typeString": "struct LibIterableMapping.IterableMapping"
                  },
                  "typeName": {
                    "id": 5674,
                    "name": "LibIterableMapping.IterableMapping",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4424,
                    "src": "514:34:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IterableMapping_$4424_storage_ptr",
                      "typeString": "struct LibIterableMapping.IterableMapping"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5678,
                    "nodeType": "Block",
                    "src": "574:2:43",
                    "statements": []
                  },
                  "id": 5679,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5676,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "571:2:43"
                  },
                  "returnParameters": {
                    "id": 5677,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "574:0:43"
                  },
                  "scope": 5798,
                  "src": "560:16:43",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5694,
                    "nodeType": "Block",
                    "src": "692:60:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5690,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5681,
                              "src": "740:1:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5691,
                              "name": "t",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5683,
                              "src": "743:1:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5688,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "709:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5689,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stringEqual",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4448,
                            "src": "709:30:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (string memory,string memory) pure returns (bool)"
                            }
                          },
                          "id": 5692,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "709:36:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 5687,
                        "id": 5693,
                        "nodeType": "Return",
                        "src": "702:43:43"
                      }
                    ]
                  },
                  "functionSelector": "a1298368",
                  "id": 5695,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stringEqual",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5684,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5681,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 5695,
                        "src": "603:15:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5680,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "603:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5683,
                        "mutability": "mutable",
                        "name": "t",
                        "nodeType": "VariableDeclaration",
                        "scope": 5695,
                        "src": "620:15:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5682,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "620:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "602:34:43"
                  },
                  "returnParameters": {
                    "id": 5687,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5686,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5695,
                        "src": "682:4:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5685,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "682:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "681:6:43"
                  },
                  "scope": 5798,
                  "src": "582:170:43",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5707,
                    "nodeType": "Block",
                    "src": "825:59:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5704,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5697,
                              "src": "875:1:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5702,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "842:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5703,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isEmptyString",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4461,
                            "src": "842:32:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (string memory) pure returns (bool)"
                            }
                          },
                          "id": 5705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "842:35:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 5701,
                        "id": 5706,
                        "nodeType": "Return",
                        "src": "835:42:43"
                      }
                    ]
                  },
                  "functionSelector": "a45f379e",
                  "id": 5708,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isEmptyString",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5698,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5697,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 5708,
                        "src": "781:15:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5696,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "781:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "780:17:43"
                  },
                  "returnParameters": {
                    "id": 5701,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5700,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5708,
                        "src": "819:4:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5699,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "819:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "818:6:43"
                  },
                  "scope": 5798,
                  "src": "758:126:43",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5721,
                    "nodeType": "Block",
                    "src": "957:65:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5717,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "1004:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            {
                              "id": 5718,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5710,
                              "src": "1010:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5715,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "974:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "nameExists",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4494,
                            "src": "974:29:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory) view returns (bool)"
                            }
                          },
                          "id": 5719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "974:41:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 5714,
                        "id": 5720,
                        "nodeType": "Return",
                        "src": "967:48:43"
                      }
                    ]
                  },
                  "functionSelector": "cc637afe",
                  "id": 5722,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nameExists",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5711,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5710,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 5722,
                        "src": "910:18:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5709,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "910:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "909:20:43"
                  },
                  "returnParameters": {
                    "id": 5714,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5713,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5722,
                        "src": "951:4:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5712,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "951:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "950:6:43"
                  },
                  "scope": 5798,
                  "src": "890:132:43",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5732,
                    "nodeType": "Block",
                    "src": "1076:55:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5729,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "1119:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            ],
                            "expression": {
                              "id": 5727,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "1093:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4506,
                            "src": "1093:25:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 5730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1093:31:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5726,
                        "id": 5731,
                        "nodeType": "Return",
                        "src": "1086:38:43"
                      }
                    ]
                  },
                  "functionSelector": "1f7b6d32",
                  "id": 5733,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "length",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5723,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1043:2:43"
                  },
                  "returnParameters": {
                    "id": 5726,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5725,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5733,
                        "src": "1067:7:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5724,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1067:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1066:9:43"
                  },
                  "scope": 5798,
                  "src": "1028:103:43",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5746,
                    "nodeType": "Block",
                    "src": "1270:82:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5742,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "1334:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            {
                              "id": 5743,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5735,
                              "src": "1340:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5740,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "1287:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTransferDefinitionByName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4530,
                            "src": "1287:46:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory) view returns (struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 5744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1287:58:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory"
                          }
                        },
                        "functionReturnParameters": 5739,
                        "id": 5745,
                        "nodeType": "Return",
                        "src": "1280:65:43"
                      }
                    ]
                  },
                  "functionSelector": "e6131117",
                  "id": 5747,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitionByName",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5735,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 5747,
                        "src": "1174:18:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5734,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1174:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1173:20:43"
                  },
                  "returnParameters": {
                    "id": 5739,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5738,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5747,
                        "src": "1239:25:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 5737,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "1239:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1238:27:43"
                  },
                  "scope": 5798,
                  "src": "1137:215:43",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5760,
                    "nodeType": "Block",
                    "src": "1487:84:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5756,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "1552:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            {
                              "id": 5757,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5749,
                              "src": "1558:5:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5754,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "1504:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5755,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTransferDefinitionByIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4558,
                            "src": "1504:47:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_uint256_$returns$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,uint256) view returns (struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 5758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1504:60:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory"
                          }
                        },
                        "functionReturnParameters": 5753,
                        "id": 5759,
                        "nodeType": "Return",
                        "src": "1497:67:43"
                      }
                    ]
                  },
                  "functionSelector": "c981ccc3",
                  "id": 5761,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitionByIndex",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5750,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5749,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "scope": 5761,
                        "src": "1396:13:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5748,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1396:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1395:15:43"
                  },
                  "returnParameters": {
                    "id": 5753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5752,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5761,
                        "src": "1456:25:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 5751,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "1456:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1455:27:43"
                  },
                  "scope": 5798,
                  "src": "1358:213:43",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5772,
                    "nodeType": "Block",
                    "src": "1689:71:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5769,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "1748:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            ],
                            "expression": {
                              "id": 5767,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "1706:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5768,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTransferDefinitions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4610,
                            "src": "1706:41:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_IterableMapping_$4424_storage_ptr_$returns$_t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer) view returns (struct RegisteredTransfer memory[] memory)"
                            }
                          },
                          "id": 5770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1706:47:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory[] memory"
                          }
                        },
                        "functionReturnParameters": 5766,
                        "id": 5771,
                        "nodeType": "Return",
                        "src": "1699:54:43"
                      }
                    ]
                  },
                  "functionSelector": "c9ff4d25",
                  "id": 5773,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTransferDefinitions",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5762,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1608:2:43"
                  },
                  "returnParameters": {
                    "id": 5766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5765,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5773,
                        "src": "1656:27:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct RegisteredTransfer[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5763,
                            "name": "RegisteredTransfer",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3967,
                            "src": "1656:18:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                              "typeString": "struct RegisteredTransfer"
                            }
                          },
                          "id": 5764,
                          "nodeType": "ArrayTypeName",
                          "src": "1656:20:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RegisteredTransfer_$3967_storage_$dyn_storage_ptr",
                            "typeString": "struct RegisteredTransfer[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1655:29:43"
                  },
                  "scope": 5798,
                  "src": "1577:183:43",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5784,
                    "nodeType": "Block",
                    "src": "1840:80:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5780,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "1898:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            {
                              "id": 5781,
                              "name": "transfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5775,
                              "src": "1904:8:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              },
                              {
                                "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                                "typeString": "struct RegisteredTransfer memory"
                              }
                            ],
                            "expression": {
                              "id": 5778,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "1857:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addTransferDefinition",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4661,
                            "src": "1857:40:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_struct$_RegisteredTransfer_$3967_memory_ptr_$returns$__$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,struct RegisteredTransfer memory)"
                            }
                          },
                          "id": 5782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1857:56:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "functionReturnParameters": 5777,
                        "id": 5783,
                        "nodeType": "Return",
                        "src": "1850:63:43"
                      }
                    ]
                  },
                  "functionSelector": "55304c3f",
                  "id": 5785,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5776,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5775,
                        "mutability": "mutable",
                        "name": "transfer",
                        "nodeType": "VariableDeclaration",
                        "scope": 5785,
                        "src": "1797:34:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 5774,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "1797:18:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1796:36:43"
                  },
                  "returnParameters": {
                    "id": 5777,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1840:0:43"
                  },
                  "scope": 5798,
                  "src": "1766:154:43",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5796,
                    "nodeType": "Block",
                    "src": "1987:79:43",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5792,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5675,
                              "src": "2048:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              }
                            },
                            {
                              "id": 5793,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5787,
                              "src": "2054:4:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IterableMapping_$4424_storage",
                                "typeString": "struct LibIterableMapping.IterableMapping storage ref"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5790,
                              "name": "LibIterableMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4735,
                              "src": "2004:18:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_LibIterableMapping_$4735_$",
                                "typeString": "type(library LibIterableMapping)"
                              }
                            },
                            "id": 5791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "removeTransferDefinition",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4734,
                            "src": "2004:43:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_IterableMapping_$4424_storage_ptr_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (struct LibIterableMapping.IterableMapping storage pointer,string memory)"
                            }
                          },
                          "id": 5794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2004:55:43",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "functionReturnParameters": 5789,
                        "id": 5795,
                        "nodeType": "Return",
                        "src": "1997:62:43"
                      }
                    ]
                  },
                  "functionSelector": "961bf9b1",
                  "id": 5797,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeTransferDefinition",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5788,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5787,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 5797,
                        "src": "1960:18:43",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5786,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1960:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1959:20:43"
                  },
                  "returnParameters": {
                    "id": 5789,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1987:0:43"
                  },
                  "scope": 5798,
                  "src": "1926:140:43",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 5799,
              "src": "406:1662:43"
            }
          ],
          "src": "39:2030:43"
        },
        "id": 43
      },
      "src.sol/testing/TestToken.sol": {
        "ast": {
          "absolutePath": "src.sol/testing/TestToken.sol",
          "exportedSymbols": {
            "TestToken": [
              5844
            ]
          },
          "id": 5845,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5800,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:44"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "id": 5801,
              "nodeType": "ImportDirective",
              "scope": 5845,
              "sourceUnit": 1077,
              "src": "58:55:44",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5802,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1076,
                    "src": "271:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1076",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 5803,
                  "nodeType": "InheritanceSpecifier",
                  "src": "271:5:44"
                }
              ],
              "contractDependencies": [
                22,
                1076,
                1154
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 5844,
              "linearizedBaseContracts": [
                5844,
                1076,
                1154,
                22
              ],
              "name": "TestToken",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 5816,
                    "nodeType": "Block",
                    "src": "325:49:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 5811,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "341:3:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5812,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "341:10:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "hexValue": "31303030303030",
                              "id": 5813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "353:13:44",
                              "subdenomination": "ether",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000000000"
                              },
                              "value": "1000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_rational_1000000000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000000000"
                              }
                            ],
                            "id": 5810,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 952,
                            "src": "335:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "335:32:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5815,
                        "nodeType": "ExpressionStatement",
                        "src": "335:32:44"
                      }
                    ]
                  },
                  "id": 5817,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "hexValue": "5465737420546f6b656e",
                          "id": 5806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "303:12:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_81e8ad438398ab0d4a2a7ecb159490c091bb27c67ace5181f70084e30fadaea2",
                            "typeString": "literal_string \"Test Token\""
                          },
                          "value": "Test Token"
                        },
                        {
                          "hexValue": "54455354",
                          "id": 5807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "317:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_852daa74cc3c31fe64542bb9b8764cfb91cc30f9acf9389071ffb44a9eefde46",
                            "typeString": "literal_string \"TEST\""
                          },
                          "value": "TEST"
                        }
                      ],
                      "id": 5808,
                      "modifierName": {
                        "id": 5805,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1076,
                        "src": "297:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$1076_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "297:27:44"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5804,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "294:2:44"
                  },
                  "returnParameters": {
                    "id": 5809,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "325:0:44"
                  },
                  "scope": 5844,
                  "src": "283:91:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5829,
                    "nodeType": "Block",
                    "src": "436:39:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5825,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5819,
                              "src": "452:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5826,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5821,
                              "src": "461:6:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5824,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 952,
                            "src": "446:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "446:22:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5828,
                        "nodeType": "ExpressionStatement",
                        "src": "446:22:44"
                      }
                    ]
                  },
                  "functionSelector": "40c10f19",
                  "id": 5830,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5822,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5819,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5830,
                        "src": "394:15:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5818,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "394:7:44",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5821,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5830,
                        "src": "411:14:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5820,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "411:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "393:33:44"
                  },
                  "returnParameters": {
                    "id": 5823,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "436:0:44"
                  },
                  "scope": 5844,
                  "src": "380:95:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5842,
                    "nodeType": "Block",
                    "src": "537:39:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5838,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5832,
                              "src": "553:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5839,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5834,
                              "src": "562:6:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5837,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1008,
                            "src": "547:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "547:22:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5841,
                        "nodeType": "ExpressionStatement",
                        "src": "547:22:44"
                      }
                    ]
                  },
                  "functionSelector": "9dc29fac",
                  "id": 5843,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5832,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5843,
                        "src": "495:15:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5831,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "495:7:44",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5834,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5843,
                        "src": "512:14:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "512:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "494:33:44"
                  },
                  "returnParameters": {
                    "id": 5836,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "537:0:44"
                  },
                  "scope": 5844,
                  "src": "481:95:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5845,
              "src": "249:329:44"
            }
          ],
          "src": "33:546:44"
        },
        "id": 44
      },
      "src.sol/transferDefinitions/HashlockTransfer.sol": {
        "ast": {
          "absolutePath": "src.sol/transferDefinitions/HashlockTransfer.sol",
          "exportedSymbols": {
            "HashlockTransfer": [
              6074
            ]
          },
          "id": 6075,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5846,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:45"
            },
            {
              "id": 5847,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:45"
            },
            {
              "absolutePath": "src.sol/transferDefinitions/TransferDefinition.sol",
              "file": "./TransferDefinition.sol",
              "id": 5848,
              "nodeType": "ImportDirective",
              "scope": 6075,
              "sourceUnit": 6110,
              "src": "98:34:45",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5850,
                    "name": "TransferDefinition",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6109,
                    "src": "460:18:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                      "typeString": "contract TransferDefinition"
                    }
                  },
                  "id": 5851,
                  "nodeType": "InheritanceSpecifier",
                  "src": "460:18:45"
                }
              ],
              "contractDependencies": [
                3953,
                6109
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 5849,
                "nodeType": "StructuredDocumentation",
                "src": "134:296:45",
                "text": "@title HashlockTransfer\n @author Connext <support@connext.network>\n @notice This contract allows users to claim a payment locked in\n         the application if they provide the correct preImage. The payment is\n         reverted if not unlocked by the timelock if one is provided."
              },
              "fullyImplemented": true,
              "id": 6074,
              "linearizedBaseContracts": [
                6074,
                6109,
                3953
              ],
              "name": "HashlockTransfer",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "HashlockTransfer.TransferState",
                  "id": 5856,
                  "members": [
                    {
                      "constant": false,
                      "id": 5853,
                      "mutability": "mutable",
                      "name": "lockHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5856,
                      "src": "516:16:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5852,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "516:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5855,
                      "mutability": "mutable",
                      "name": "expiry",
                      "nodeType": "VariableDeclaration",
                      "scope": 5856,
                      "src": "542:14:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5854,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "542:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TransferState",
                  "nodeType": "StructDefinition",
                  "scope": 6074,
                  "src": "485:116:45",
                  "visibility": "public"
                },
                {
                  "canonicalName": "HashlockTransfer.TransferResolver",
                  "id": 5859,
                  "members": [
                    {
                      "constant": false,
                      "id": 5858,
                      "mutability": "mutable",
                      "name": "preImage",
                      "nodeType": "VariableDeclaration",
                      "scope": 5859,
                      "src": "641:16:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5857,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "641:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TransferResolver",
                  "nodeType": "StructDefinition",
                  "scope": 6074,
                  "src": "607:57:45",
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3932
                  ],
                  "constant": true,
                  "functionSelector": "8052474d",
                  "id": 5863,
                  "mutability": "constant",
                  "name": "Name",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5861,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "729:8:45"
                  },
                  "scope": 6074,
                  "src": "706:57:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5860,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "706:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "486173686c6f636b5472616e73666572",
                    "id": 5862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "745:18:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_19c2d8e7e10b0d3484b68d1fff99550af09cb64fb2dc561dc88012b83b3fc24c",
                      "typeString": "literal_string \"HashlockTransfer\""
                    },
                    "value": "HashlockTransfer"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3937
                  ],
                  "constant": true,
                  "functionSelector": "8de8b77e",
                  "id": 5867,
                  "mutability": "constant",
                  "name": "StateEncoding",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5865,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "792:8:45"
                  },
                  "scope": 6074,
                  "src": "769:97:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5864,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "769:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "7475706c652862797465733332206c6f636b486173682c2075696e743235362065787069727929",
                    "id": 5866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "825:41:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_98122d29b958bfdbc465dee7db17d7430acb7ad8272ba4ebc40f1de0824c47ba",
                      "typeString": "literal_string \"tuple(bytes32 lockHash, uint256 expiry)\""
                    },
                    "value": "tuple(bytes32 lockHash, uint256 expiry)"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3942
                  ],
                  "constant": true,
                  "functionSelector": "3722aff9",
                  "id": 5871,
                  "mutability": "constant",
                  "name": "ResolverEncoding",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5869,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "895:8:45"
                  },
                  "scope": 6074,
                  "src": "872:84:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5868,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "872:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "7475706c65286279746573333220707265496d61676529",
                    "id": 5870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "931:25:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_9267023e5cd2763c042ec619ff4646f78e60c13dff38beedf387add5f5558201",
                      "typeString": "literal_string \"tuple(bytes32 preImage)\""
                    },
                    "value": "tuple(bytes32 preImage)"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3947
                  ],
                  "body": {
                    "id": 5894,
                    "nodeType": "Block",
                    "src": "1033:120:45",
                    "statements": [
                      {
                        "assignments": [
                          5878
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5878,
                            "mutability": "mutable",
                            "name": "resolver",
                            "nodeType": "VariableDeclaration",
                            "scope": 5894,
                            "src": "1041:32:45",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                              "typeString": "struct HashlockTransfer.TransferResolver"
                            },
                            "typeName": {
                              "id": 5877,
                              "name": "TransferResolver",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5859,
                              "src": "1041:16:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$5859_storage_ptr",
                                "typeString": "struct HashlockTransfer.TransferResolver"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5879,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1041:32:45"
                      },
                      {
                        "expression": {
                          "id": 5887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 5880,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5878,
                              "src": "1081:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                                "typeString": "struct HashlockTransfer.TransferResolver memory"
                              }
                            },
                            "id": 5882,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "preImage",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5858,
                            "src": "1081:17:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1109:1:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5884,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1101:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 5883,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1101:7:45",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1101:10:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1081:30:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 5888,
                        "nodeType": "ExpressionStatement",
                        "src": "1081:30:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5891,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5878,
                              "src": "1137:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                                "typeString": "struct HashlockTransfer.TransferResolver memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                                "typeString": "struct HashlockTransfer.TransferResolver memory"
                              }
                            ],
                            "expression": {
                              "id": 5889,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1126:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 5890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "src": "1126:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 5892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1126:20:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 5876,
                        "id": 5893,
                        "nodeType": "Return",
                        "src": "1119:27:45"
                      }
                    ]
                  },
                  "functionSelector": "0528aa1c",
                  "id": 5895,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "EncodedCancel",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5873,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1002:8:45"
                  },
                  "parameters": {
                    "id": 5872,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "985:2:45"
                  },
                  "returnParameters": {
                    "id": 5876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5875,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5895,
                        "src": "1019:12:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5874,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1019:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1018:14:45"
                  },
                  "scope": 6074,
                  "src": "963:190:45",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3916
                  ],
                  "body": {
                    "id": 5970,
                    "nodeType": "Block",
                    "src": "1310:740:45",
                    "statements": [
                      {
                        "assignments": [
                          5906
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5906,
                            "mutability": "mutable",
                            "name": "state",
                            "nodeType": "VariableDeclaration",
                            "scope": 5970,
                            "src": "1349:26:45",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                              "typeString": "struct HashlockTransfer.TransferState"
                            },
                            "typeName": {
                              "id": 5905,
                              "name": "TransferState",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5856,
                              "src": "1349:13:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferState_$5856_storage_ptr",
                                "typeString": "struct HashlockTransfer.TransferState"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5913,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5909,
                              "name": "encodedState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5899,
                              "src": "1389:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 5910,
                                  "name": "TransferState",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5856,
                                  "src": "1404:13:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_TransferState_$5856_storage_ptr_$",
                                    "typeString": "type(struct HashlockTransfer.TransferState storage pointer)"
                                  }
                                }
                              ],
                              "id": 5911,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1403:15:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$5856_storage_ptr_$",
                                "typeString": "type(struct HashlockTransfer.TransferState storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$5856_storage_ptr_$",
                                "typeString": "type(struct HashlockTransfer.TransferState storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 5907,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1378:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 5908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "1378:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 5912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1378:41:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                            "typeString": "struct HashlockTransfer.TransferState memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1349:70:45"
                      },
                      {
                        "assignments": [
                          5915
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5915,
                            "mutability": "mutable",
                            "name": "balance",
                            "nodeType": "VariableDeclaration",
                            "scope": 5970,
                            "src": "1429:22:45",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                              "typeString": "struct Balance"
                            },
                            "typeName": {
                              "id": 5914,
                              "name": "Balance",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4023,
                              "src": "1429:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                                "typeString": "struct Balance"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5922,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5918,
                              "name": "encodedBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "1465:14:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 5919,
                                  "name": "Balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4023,
                                  "src": "1482:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                    "typeString": "type(struct Balance storage pointer)"
                                  }
                                }
                              ],
                              "id": 5920,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1481:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 5916,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1454:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 5917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "1454:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 5921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1454:37:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                            "typeString": "struct Balance memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1429:62:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "expression": {
                                    "id": 5924,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5915,
                                    "src": "1523:7:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  },
                                  "id": 5925,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4018,
                                  "src": "1523:14:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                    "typeString": "uint256[2] memory"
                                  }
                                },
                                "id": 5927,
                                "indexExpression": {
                                  "hexValue": "30",
                                  "id": 5926,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1538:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1523:17:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1543:1:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1523:21:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "486173686c6f636b5472616e736665723a205a4552305f53454e4445525f42414c414e4345",
                              "id": 5930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1558:39:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cbccad299d305e549814fa0a206390a7e3c82526703052b27639f5861060023f",
                                "typeString": "literal_string \"HashlockTransfer: ZER0_SENDER_BALANCE\""
                              },
                              "value": "HashlockTransfer: ZER0_SENDER_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cbccad299d305e549814fa0a206390a7e3c82526703052b27639f5861060023f",
                                "typeString": "literal_string \"HashlockTransfer: ZER0_SENDER_BALANCE\""
                              }
                            ],
                            "id": 5923,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1502:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1502:105:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5932,
                        "nodeType": "ExpressionStatement",
                        "src": "1502:105:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "expression": {
                                    "id": 5934,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5915,
                                    "src": "1639:7:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  },
                                  "id": 5935,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4018,
                                  "src": "1639:14:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                    "typeString": "uint256[2] memory"
                                  }
                                },
                                "id": 5937,
                                "indexExpression": {
                                  "hexValue": "31",
                                  "id": 5936,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1654:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1639:17:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5938,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1660:1:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1639:22:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "486173686c6f636b5472616e736665723a204e4f4e5a45524f5f524543495049454e545f42414c414e4345",
                              "id": 5940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1675:45:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5a61d7ec4b007d80c63fe7e522942b90ab0270dfa108d75b9d0495a5a18a9868",
                                "typeString": "literal_string \"HashlockTransfer: NONZERO_RECIPIENT_BALANCE\""
                              },
                              "value": "HashlockTransfer: NONZERO_RECIPIENT_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5a61d7ec4b007d80c63fe7e522942b90ab0270dfa108d75b9d0495a5a18a9868",
                                "typeString": "literal_string \"HashlockTransfer: NONZERO_RECIPIENT_BALANCE\""
                              }
                            ],
                            "id": 5933,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1618:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5941,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1618:112:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5942,
                        "nodeType": "ExpressionStatement",
                        "src": "1618:112:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 5950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 5944,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5906,
                                  "src": "1761:5:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                                    "typeString": "struct HashlockTransfer.TransferState memory"
                                  }
                                },
                                "id": 5945,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lockHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5853,
                                "src": "1761:14:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5948,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1787:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5947,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1779:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": {
                                    "id": 5946,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1779:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5949,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1779:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "1761:28:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "486173686c6f636b5472616e736665723a20454d5054595f4c4f434b48415348",
                              "id": 5951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1803:34:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e430739308b503674e197156b0a9a13571a5a6d38dcafdf59e204c0e2cdbcf2b",
                                "typeString": "literal_string \"HashlockTransfer: EMPTY_LOCKHASH\""
                              },
                              "value": "HashlockTransfer: EMPTY_LOCKHASH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e430739308b503674e197156b0a9a13571a5a6d38dcafdf59e204c0e2cdbcf2b",
                                "typeString": "literal_string \"HashlockTransfer: EMPTY_LOCKHASH\""
                              }
                            ],
                            "id": 5943,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1740:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1740:107:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5953,
                        "nodeType": "ExpressionStatement",
                        "src": "1740:107:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5964,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5958,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 5955,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5906,
                                    "src": "1878:5:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                                      "typeString": "struct HashlockTransfer.TransferState memory"
                                    }
                                  },
                                  "id": 5956,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "expiry",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5855,
                                  "src": "1878:12:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 5957,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1894:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1878:17:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5963,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 5959,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5906,
                                    "src": "1899:5:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                                      "typeString": "struct HashlockTransfer.TransferState memory"
                                    }
                                  },
                                  "id": 5960,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "expiry",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5855,
                                  "src": "1899:12:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "expression": {
                                    "id": 5961,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "1914:5:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 5962,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "1914:15:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1899:30:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1878:51:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "486173686c6f636b5472616e736665723a20455850495245445f54494d454c4f434b",
                              "id": 5965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1943:36:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cd5600ffdab592fff932156e88299f4bc01a831cc736504db578310584900244",
                                "typeString": "literal_string \"HashlockTransfer: EXPIRED_TIMELOCK\""
                              },
                              "value": "HashlockTransfer: EXPIRED_TIMELOCK"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cd5600ffdab592fff932156e88299f4bc01a831cc736504db578310584900244",
                                "typeString": "literal_string \"HashlockTransfer: EXPIRED_TIMELOCK\""
                              }
                            ],
                            "id": 5954,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1857:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1857:132:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5967,
                        "nodeType": "ExpressionStatement",
                        "src": "1857:132:45"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2039:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5904,
                        "id": 5969,
                        "nodeType": "Return",
                        "src": "2032:11:45"
                      }
                    ]
                  },
                  "functionSelector": "94184ba9",
                  "id": 5971,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "create",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5901,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1274:8:45"
                  },
                  "parameters": {
                    "id": 5900,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5897,
                        "mutability": "mutable",
                        "name": "encodedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 5971,
                        "src": "1176:29:45",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5896,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1176:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5899,
                        "mutability": "mutable",
                        "name": "encodedState",
                        "nodeType": "VariableDeclaration",
                        "scope": 5971,
                        "src": "1207:27:45",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5898,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1207:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1175:60:45"
                  },
                  "returnParameters": {
                    "id": 5904,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5903,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5971,
                        "src": "1300:4:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5902,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1300:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1299:6:45"
                  },
                  "scope": 6074,
                  "src": "1160:890:45",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3927
                  ],
                  "body": {
                    "id": 6072,
                    "nodeType": "Block",
                    "src": "2243:1242:45",
                    "statements": [
                      {
                        "assignments": [
                          5984
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5984,
                            "mutability": "mutable",
                            "name": "state",
                            "nodeType": "VariableDeclaration",
                            "scope": 6072,
                            "src": "2253:26:45",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                              "typeString": "struct HashlockTransfer.TransferState"
                            },
                            "typeName": {
                              "id": 5983,
                              "name": "TransferState",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5856,
                              "src": "2253:13:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferState_$5856_storage_ptr",
                                "typeString": "struct HashlockTransfer.TransferState"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5991,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5987,
                              "name": "encodedState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5975,
                              "src": "2293:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 5988,
                                  "name": "TransferState",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5856,
                                  "src": "2308:13:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_TransferState_$5856_storage_ptr_$",
                                    "typeString": "type(struct HashlockTransfer.TransferState storage pointer)"
                                  }
                                }
                              ],
                              "id": 5989,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2307:15:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$5856_storage_ptr_$",
                                "typeString": "type(struct HashlockTransfer.TransferState storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$5856_storage_ptr_$",
                                "typeString": "type(struct HashlockTransfer.TransferState storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 5985,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2282:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 5986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2282:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 5990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2282:41:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                            "typeString": "struct HashlockTransfer.TransferState memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2253:70:45"
                      },
                      {
                        "assignments": [
                          5993
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5993,
                            "mutability": "mutable",
                            "name": "resolver",
                            "nodeType": "VariableDeclaration",
                            "scope": 6072,
                            "src": "2333:32:45",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                              "typeString": "struct HashlockTransfer.TransferResolver"
                            },
                            "typeName": {
                              "id": 5992,
                              "name": "TransferResolver",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5859,
                              "src": "2333:16:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$5859_storage_ptr",
                                "typeString": "struct HashlockTransfer.TransferResolver"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6000,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5996,
                              "name": "encodedResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5977,
                              "src": "2391:15:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 5997,
                                  "name": "TransferResolver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5859,
                                  "src": "2409:16:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_TransferResolver_$5859_storage_ptr_$",
                                    "typeString": "type(struct HashlockTransfer.TransferResolver storage pointer)"
                                  }
                                }
                              ],
                              "id": 5998,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2408:18:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferResolver_$5859_storage_ptr_$",
                                "typeString": "type(struct HashlockTransfer.TransferResolver storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_TransferResolver_$5859_storage_ptr_$",
                                "typeString": "type(struct HashlockTransfer.TransferResolver storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 5994,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2380:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 5995,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2380:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 5999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2380:47:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                            "typeString": "struct HashlockTransfer.TransferResolver memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2333:94:45"
                      },
                      {
                        "assignments": [
                          6002
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6002,
                            "mutability": "mutable",
                            "name": "balance",
                            "nodeType": "VariableDeclaration",
                            "scope": 6072,
                            "src": "2437:22:45",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                              "typeString": "struct Balance"
                            },
                            "typeName": {
                              "id": 6001,
                              "name": "Balance",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4023,
                              "src": "2437:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                                "typeString": "struct Balance"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6009,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6005,
                              "name": "encodedBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5973,
                              "src": "2473:14:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6006,
                                  "name": "Balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4023,
                                  "src": "2490:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                    "typeString": "type(struct Balance storage pointer)"
                                  }
                                }
                              ],
                              "id": 6007,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2489:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6003,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2462:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2462:10:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2462:37:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                            "typeString": "struct Balance memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2437:62:45"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 6016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 6010,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5993,
                              "src": "2689:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                                "typeString": "struct HashlockTransfer.TransferResolver memory"
                              }
                            },
                            "id": 6011,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "preImage",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5858,
                            "src": "2689:17:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 6014,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2718:1:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2710:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 6012,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "2710:7:45",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 6015,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2710:10:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2689:31:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6069,
                        "nodeType": "IfStatement",
                        "src": "2685:583:45",
                        "trueBody": {
                          "id": 6068,
                          "nodeType": "Block",
                          "src": "2722:546:45",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 6027,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6021,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6018,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5984,
                                          "src": "2787:5:45",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                                            "typeString": "struct HashlockTransfer.TransferState memory"
                                          }
                                        },
                                        "id": 6019,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "expiry",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 5855,
                                        "src": "2787:12:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 6020,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2803:1:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "2787:17:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6026,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6022,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5984,
                                          "src": "2808:5:45",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                                            "typeString": "struct HashlockTransfer.TransferState memory"
                                          }
                                        },
                                        "id": 6023,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "expiry",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 5855,
                                        "src": "2808:12:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "expression": {
                                          "id": 6024,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "2823:5:45",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 6025,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "2823:15:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2808:30:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "2787:51:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "486173686c6f636b5472616e736665723a205041594d454e545f45585049524544",
                                    "id": 6028,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2840:35:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_dd572b204feb776d36153c09cf13e206a9cf40650d5fa491b988396a45f5eb67",
                                      "typeString": "literal_string \"HashlockTransfer: PAYMENT_EXPIRED\""
                                    },
                                    "value": "HashlockTransfer: PAYMENT_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_dd572b204feb776d36153c09cf13e206a9cf40650d5fa491b988396a45f5eb67",
                                      "typeString": "literal_string \"HashlockTransfer: PAYMENT_EXPIRED\""
                                    }
                                  ],
                                  "id": 6017,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "2779:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 6029,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2779:97:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6030,
                              "nodeType": "ExpressionStatement",
                              "src": "2779:97:45"
                            },
                            {
                              "assignments": [
                                6032
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6032,
                                  "mutability": "mutable",
                                  "name": "generatedHash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6068,
                                  "src": "2943:21:45",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 6031,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2943:7:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6040,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 6036,
                                          "name": "resolver",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5993,
                                          "src": "2985:8:45",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TransferResolver_$5859_memory_ptr",
                                            "typeString": "struct HashlockTransfer.TransferResolver memory"
                                          }
                                        },
                                        "id": 6037,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "preImage",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 5858,
                                        "src": "2985:17:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "expression": {
                                        "id": 6034,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "2974:3:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 6035,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encode",
                                      "nodeType": "MemberAccess",
                                      "src": "2974:10:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 6038,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2974:29:45",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 6033,
                                  "name": "sha256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -22,
                                  "src": "2967:6:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_sha256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 6039,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2967:37:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2943:61:45"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    "id": 6045,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 6042,
                                        "name": "state",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5984,
                                        "src": "3043:5:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TransferState_$5856_memory_ptr",
                                          "typeString": "struct HashlockTransfer.TransferState memory"
                                        }
                                      },
                                      "id": 6043,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "lockHash",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5853,
                                      "src": "3043:14:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "id": 6044,
                                      "name": "generatedHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6032,
                                      "src": "3061:13:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "src": "3043:31:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "486173686c6f636b5472616e736665723a20494e56414c49445f505245494d414745",
                                    "id": 6046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3092:36:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_9fa5437dc3b712d06b7916f34979d1bce279eb3aafcbf9761b09579c86fb0330",
                                      "typeString": "literal_string \"HashlockTransfer: INVALID_PREIMAGE\""
                                    },
                                    "value": "HashlockTransfer: INVALID_PREIMAGE"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_9fa5437dc3b712d06b7916f34979d1bce279eb3aafcbf9761b09579c86fb0330",
                                      "typeString": "literal_string \"HashlockTransfer: INVALID_PREIMAGE\""
                                    }
                                  ],
                                  "id": 6041,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "3018:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 6047,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3018:124:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6048,
                              "nodeType": "ExpressionStatement",
                              "src": "3018:124:45"
                            },
                            {
                              "expression": {
                                "id": 6058,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 6049,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6002,
                                      "src": "3185:7:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 6052,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4018,
                                    "src": "3185:14:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                      "typeString": "uint256[2] memory"
                                    }
                                  },
                                  "id": 6053,
                                  "indexExpression": {
                                    "hexValue": "31",
                                    "id": 6051,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3200:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3185:17:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 6054,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6002,
                                      "src": "3205:7:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 6055,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4018,
                                    "src": "3205:14:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                      "typeString": "uint256[2] memory"
                                    }
                                  },
                                  "id": 6057,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 6056,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3220:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3205:17:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3185:37:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6059,
                              "nodeType": "ExpressionStatement",
                              "src": "3185:37:45"
                            },
                            {
                              "expression": {
                                "id": 6066,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 6060,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6002,
                                      "src": "3236:7:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 6063,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4018,
                                    "src": "3236:14:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                      "typeString": "uint256[2] memory"
                                    }
                                  },
                                  "id": 6064,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 6062,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3251:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3236:17:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "30",
                                  "id": 6065,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3256:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3236:21:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6067,
                              "nodeType": "ExpressionStatement",
                              "src": "3236:21:45"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 6070,
                          "name": "balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6002,
                          "src": "3471:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                            "typeString": "struct Balance memory"
                          }
                        },
                        "functionReturnParameters": 5982,
                        "id": 6071,
                        "nodeType": "Return",
                        "src": "3464:14:45"
                      }
                    ]
                  },
                  "functionSelector": "8ef98a7e",
                  "id": 6073,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resolve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5979,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2209:8:45"
                  },
                  "parameters": {
                    "id": 5978,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5973,
                        "mutability": "mutable",
                        "name": "encodedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 6073,
                        "src": "2082:29:45",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5972,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2082:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5975,
                        "mutability": "mutable",
                        "name": "encodedState",
                        "nodeType": "VariableDeclaration",
                        "scope": 6073,
                        "src": "2121:27:45",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5974,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2121:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5977,
                        "mutability": "mutable",
                        "name": "encodedResolver",
                        "nodeType": "VariableDeclaration",
                        "scope": 6073,
                        "src": "2158:30:45",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5976,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2158:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2072:122:45"
                  },
                  "returnParameters": {
                    "id": 5982,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5981,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6073,
                        "src": "2227:14:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 5980,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "2227:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2226:16:45"
                  },
                  "scope": 6074,
                  "src": "2056:1429:45",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6075,
              "src": "431:3056:45"
            }
          ],
          "src": "39:3449:45"
        },
        "id": 45
      },
      "src.sol/transferDefinitions/TransferDefinition.sol": {
        "ast": {
          "absolutePath": "src.sol/transferDefinitions/TransferDefinition.sol",
          "exportedSymbols": {
            "TransferDefinition": [
              6109
            ]
          },
          "id": 6110,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6076,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:46"
            },
            {
              "id": 6077,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:46"
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferDefinition.sol",
              "file": "../interfaces/ITransferDefinition.sol",
              "id": 6078,
              "nodeType": "ImportDirective",
              "scope": 6110,
              "sourceUnit": 3954,
              "src": "98:47:46",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/interfaces/ITransferRegistry.sol",
              "file": "../interfaces/ITransferRegistry.sol",
              "id": 6079,
              "nodeType": "ImportDirective",
              "scope": 6110,
              "sourceUnit": 3993,
              "src": "146:45:46",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6081,
                    "name": "ITransferDefinition",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3953,
                    "src": "485:19:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITransferDefinition_$3953",
                      "typeString": "contract ITransferDefinition"
                    }
                  },
                  "id": 6082,
                  "nodeType": "InheritanceSpecifier",
                  "src": "485:19:46"
                }
              ],
              "contractDependencies": [
                3953
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 6080,
                "nodeType": "StructuredDocumentation",
                "src": "193:251:46",
                "text": "@title TransferDefinition\n @author Connext <support@connext.network>\n @notice This contract helps reduce boilerplate needed when creating\n         new transfer definitions by providing an implementation of\n         the required getter"
              },
              "fullyImplemented": false,
              "id": 6109,
              "linearizedBaseContracts": [
                6109,
                3953
              ],
              "name": "TransferDefinition",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    3952
                  ],
                  "body": {
                    "id": 6107,
                    "nodeType": "Block",
                    "src": "640:313:46",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 6089,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "712:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                                    "typeString": "contract TransferDefinition"
                                  }
                                },
                                "id": 6090,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "Name",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3932,
                                "src": "712:9:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 6091,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "712:11:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 6092,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "756:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                                    "typeString": "contract TransferDefinition"
                                  }
                                },
                                "id": 6093,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "StateEncoding",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3937,
                                "src": "756:18:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 6094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "756:20:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 6095,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "812:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                                    "typeString": "contract TransferDefinition"
                                  }
                                },
                                "id": 6096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "ResolverEncoding",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3942,
                                "src": "812:21:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                  "typeString": "function () view external returns (string memory)"
                                }
                              },
                              "id": 6097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "812:23:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 6100,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "873:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                                    "typeString": "contract TransferDefinition"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                                    "typeString": "contract TransferDefinition"
                                  }
                                ],
                                "id": 6099,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "865:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6098,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "865:7:46",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 6101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "865:13:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 6102,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "911:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                                    "typeString": "contract TransferDefinition"
                                  }
                                },
                                "id": 6103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "EncodedCancel",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3947,
                                "src": "911:18:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () view external returns (bytes memory)"
                                }
                              },
                              "id": 6104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "911:20:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 6088,
                            "name": "RegisteredTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3967,
                            "src": "669:18:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_RegisteredTransfer_$3967_storage_ptr_$",
                              "typeString": "type(struct RegisteredTransfer storage pointer)"
                            }
                          },
                          "id": 6105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "name",
                            "stateEncoding",
                            "resolverEncoding",
                            "definition",
                            "encodedCancel"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "669:277:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                            "typeString": "struct RegisteredTransfer memory"
                          }
                        },
                        "functionReturnParameters": 6087,
                        "id": 6106,
                        "nodeType": "Return",
                        "src": "650:296:46"
                      }
                    ]
                  },
                  "functionSelector": "206162be",
                  "id": 6108,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRegistryInformation",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6084,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "583:8:46"
                  },
                  "parameters": {
                    "id": 6083,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "542:2:46"
                  },
                  "returnParameters": {
                    "id": 6087,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6086,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6108,
                        "src": "609:25:46",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_memory_ptr",
                          "typeString": "struct RegisteredTransfer"
                        },
                        "typeName": {
                          "id": 6085,
                          "name": "RegisteredTransfer",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3967,
                          "src": "609:18:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegisteredTransfer_$3967_storage_ptr",
                            "typeString": "struct RegisteredTransfer"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "608:27:46"
                  },
                  "scope": 6109,
                  "src": "511:442:46",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6110,
              "src": "445:510:46"
            }
          ],
          "src": "39:917:46"
        },
        "id": 46
      },
      "src.sol/transferDefinitions/Withdraw.sol": {
        "ast": {
          "absolutePath": "src.sol/transferDefinitions/Withdraw.sol",
          "exportedSymbols": {
            "Withdraw": [
              6371
            ]
          },
          "id": 6372,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6111,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:47"
            },
            {
              "id": 6112,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:33:47"
            },
            {
              "absolutePath": "src.sol/transferDefinitions/TransferDefinition.sol",
              "file": "./TransferDefinition.sol",
              "id": 6113,
              "nodeType": "ImportDirective",
              "scope": 6372,
              "sourceUnit": 6110,
              "src": "98:34:47",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "src.sol/lib/LibChannelCrypto.sol",
              "file": "../lib/LibChannelCrypto.sol",
              "id": 6114,
              "nodeType": "ImportDirective",
              "scope": 6372,
              "sourceUnit": 4284,
              "src": "133:37:47",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6116,
                    "name": "TransferDefinition",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6109,
                    "src": "384:18:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TransferDefinition_$6109",
                      "typeString": "contract TransferDefinition"
                    }
                  },
                  "id": 6117,
                  "nodeType": "InheritanceSpecifier",
                  "src": "384:18:47"
                }
              ],
              "contractDependencies": [
                3953,
                6109
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 6115,
                "nodeType": "StructuredDocumentation",
                "src": "172:190:47",
                "text": "@title Withdraw\n @author Connext <support@connext.network>\n @notice This contract burns the initiator's funds if a mutually signed\n         withdraw commitment can be generated"
              },
              "fullyImplemented": true,
              "id": 6371,
              "linearizedBaseContracts": [
                6371,
                6109,
                3953
              ],
              "name": "Withdraw",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6120,
                  "libraryName": {
                    "id": 6118,
                    "name": "LibChannelCrypto",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4283,
                    "src": "415:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LibChannelCrypto_$4283",
                      "typeString": "library LibChannelCrypto"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "409:35:47",
                  "typeName": {
                    "id": 6119,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "436:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                {
                  "canonicalName": "Withdraw.TransferState",
                  "id": 6137,
                  "members": [
                    {
                      "constant": false,
                      "id": 6122,
                      "mutability": "mutable",
                      "name": "initiatorSignature",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "481:24:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6121,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "481:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6124,
                      "mutability": "mutable",
                      "name": "initiator",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "515:17:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6123,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "515:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6126,
                      "mutability": "mutable",
                      "name": "responder",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "542:17:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6125,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "542:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6128,
                      "mutability": "mutable",
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "569:12:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6127,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "569:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6130,
                      "mutability": "mutable",
                      "name": "nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "591:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6129,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "591:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6132,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "677:11:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6131,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "677:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6134,
                      "mutability": "mutable",
                      "name": "callTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "698:14:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6133,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "698:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6136,
                      "mutability": "mutable",
                      "name": "callData",
                      "nodeType": "VariableDeclaration",
                      "scope": 6137,
                      "src": "722:14:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6135,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "722:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TransferState",
                  "nodeType": "StructDefinition",
                  "scope": 6371,
                  "src": "450:293:47",
                  "visibility": "public"
                },
                {
                  "canonicalName": "Withdraw.TransferResolver",
                  "id": 6140,
                  "members": [
                    {
                      "constant": false,
                      "id": 6139,
                      "mutability": "mutable",
                      "name": "responderSignature",
                      "nodeType": "VariableDeclaration",
                      "scope": 6140,
                      "src": "783:24:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6138,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "783:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TransferResolver",
                  "nodeType": "StructDefinition",
                  "scope": 6371,
                  "src": "749:65:47",
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3932
                  ],
                  "constant": true,
                  "functionSelector": "8052474d",
                  "id": 6144,
                  "mutability": "constant",
                  "name": "Name",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6142,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "879:8:47"
                  },
                  "scope": 6371,
                  "src": "856:49:47",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6141,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "856:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "5769746864726177",
                    "id": 6143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "895:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_8d7f87ab38a7f75a63dc465e10aadacecfca64c44ca774040b039bfb004e3367",
                      "typeString": "literal_string \"Withdraw\""
                    },
                    "value": "Withdraw"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3937
                  ],
                  "constant": true,
                  "functionSelector": "8de8b77e",
                  "id": 6148,
                  "mutability": "constant",
                  "name": "StateEncoding",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6146,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "934:8:47"
                  },
                  "scope": 6371,
                  "src": "911:201:47",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6145,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "911:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "7475706c6528627974657320696e69746961746f725369676e61747572652c206164647265737320696e69746961746f722c206164647265737320726573706f6e6465722c206279746573333220646174612c2075696e74323536206e6f6e63652c2075696e74323536206665652c20616464726573732063616c6c546f2c2062797465732063616c6c4461746129",
                    "id": 6147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "967:145:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ffc8c5778229bb034de6a4233030c050f8d992c8caf73c2ffd6370e65a9955b6",
                      "typeString": "literal_string \"tuple(bytes initiatorSignature, address initiator, address responder, bytes32 data, uint256 nonce, uint256 fee, address callTo, bytes callData)\""
                    },
                    "value": "tuple(bytes initiatorSignature, address initiator, address responder, bytes32 data, uint256 nonce, uint256 fee, address callTo, bytes callData)"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3942
                  ],
                  "constant": true,
                  "functionSelector": "3722aff9",
                  "id": 6152,
                  "mutability": "constant",
                  "name": "ResolverEncoding",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6150,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1141:8:47"
                  },
                  "scope": 6371,
                  "src": "1118:92:47",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6149,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1118:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "7475706c6528627974657320726573706f6e6465725369676e617475726529",
                    "id": 6151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1177:33:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_61c95c22f41d232e30390d640bb0fed22d46ffa5ef3a75ff0db74bab9cee2a1f",
                      "typeString": "literal_string \"tuple(bytes responderSignature)\""
                    },
                    "value": "tuple(bytes responderSignature)"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3947
                  ],
                  "body": {
                    "id": 6175,
                    "nodeType": "Block",
                    "src": "1287:133:47",
                    "statements": [
                      {
                        "assignments": [
                          6159
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6159,
                            "mutability": "mutable",
                            "name": "resolver",
                            "nodeType": "VariableDeclaration",
                            "scope": 6175,
                            "src": "1295:32:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                              "typeString": "struct Withdraw.TransferResolver"
                            },
                            "typeName": {
                              "id": 6158,
                              "name": "TransferResolver",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 6140,
                              "src": "1295:16:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$6140_storage_ptr",
                                "typeString": "struct Withdraw.TransferResolver"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6160,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1295:32:47"
                      },
                      {
                        "expression": {
                          "id": 6168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 6161,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6159,
                              "src": "1335:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                                "typeString": "struct Withdraw.TransferResolver memory"
                              }
                            },
                            "id": 6163,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "responderSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6139,
                            "src": "1335:27:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "3635",
                                "id": 6166,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1375:2:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_65_by_1",
                                  "typeString": "int_const 65"
                                },
                                "value": "65"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_65_by_1",
                                  "typeString": "int_const 65"
                                }
                              ],
                              "id": 6165,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "1365:9:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (bytes memory)"
                              },
                              "typeName": {
                                "id": 6164,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "1369:5:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_storage_ptr",
                                  "typeString": "bytes"
                                }
                              }
                            },
                            "id": 6167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1365:13:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "1335:43:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 6169,
                        "nodeType": "ExpressionStatement",
                        "src": "1335:43:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6172,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6159,
                              "src": "1404:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                                "typeString": "struct Withdraw.TransferResolver memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                                "typeString": "struct Withdraw.TransferResolver memory"
                              }
                            ],
                            "expression": {
                              "id": 6170,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1393:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "src": "1393:10:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 6173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1393:20:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 6157,
                        "id": 6174,
                        "nodeType": "Return",
                        "src": "1386:27:47"
                      }
                    ]
                  },
                  "functionSelector": "0528aa1c",
                  "id": 6176,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "EncodedCancel",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6154,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1256:8:47"
                  },
                  "parameters": {
                    "id": 6153,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1239:2:47"
                  },
                  "returnParameters": {
                    "id": 6157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6156,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6176,
                        "src": "1273:12:47",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6155,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1273:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1272:14:47"
                  },
                  "scope": 6371,
                  "src": "1217:203:47",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3916
                  ],
                  "body": {
                    "id": 6280,
                    "nodeType": "Block",
                    "src": "1576:944:47",
                    "statements": [
                      {
                        "assignments": [
                          6187
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6187,
                            "mutability": "mutable",
                            "name": "state",
                            "nodeType": "VariableDeclaration",
                            "scope": 6280,
                            "src": "1623:26:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                              "typeString": "struct Withdraw.TransferState"
                            },
                            "typeName": {
                              "id": 6186,
                              "name": "TransferState",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 6137,
                              "src": "1623:13:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferState_$6137_storage_ptr",
                                "typeString": "struct Withdraw.TransferState"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6194,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6190,
                              "name": "encodedState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6180,
                              "src": "1663:12:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6191,
                                  "name": "TransferState",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6137,
                                  "src": "1678:13:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_TransferState_$6137_storage_ptr_$",
                                    "typeString": "type(struct Withdraw.TransferState storage pointer)"
                                  }
                                }
                              ],
                              "id": 6192,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1677:15:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$6137_storage_ptr_$",
                                "typeString": "type(struct Withdraw.TransferState storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$6137_storage_ptr_$",
                                "typeString": "type(struct Withdraw.TransferState storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6188,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1652:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "1652:10:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1652:41:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                            "typeString": "struct Withdraw.TransferState memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1623:70:47"
                      },
                      {
                        "assignments": [
                          6196
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6196,
                            "mutability": "mutable",
                            "name": "balance",
                            "nodeType": "VariableDeclaration",
                            "scope": 6280,
                            "src": "1703:22:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                              "typeString": "struct Balance"
                            },
                            "typeName": {
                              "id": 6195,
                              "name": "Balance",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4023,
                              "src": "1703:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                                "typeString": "struct Balance"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6203,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6199,
                              "name": "encodedBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6178,
                              "src": "1739:14:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6200,
                                  "name": "Balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4023,
                                  "src": "1756:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                    "typeString": "type(struct Balance storage pointer)"
                                  }
                                }
                              ],
                              "id": 6201,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1755:9:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6197,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1728:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "1728:10:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1728:37:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                            "typeString": "struct Balance memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1703:62:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "expression": {
                                    "id": 6205,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6196,
                                    "src": "1784:7:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  },
                                  "id": 6206,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4018,
                                  "src": "1784:14:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                    "typeString": "uint256[2] memory"
                                  }
                                },
                                "id": 6208,
                                "indexExpression": {
                                  "hexValue": "31",
                                  "id": 6207,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1799:1:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1784:17:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 6209,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1805:1:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1784:22:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57697468647261773a204e4f4e5a45524f5f524543495049454e545f42414c414e4345",
                              "id": 6211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1808:37:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_86add36a6de1fac27e9318d620b4641d2faf4a9255d805c38ce04e95644cbe98",
                                "typeString": "literal_string \"Withdraw: NONZERO_RECIPIENT_BALANCE\""
                              },
                              "value": "Withdraw: NONZERO_RECIPIENT_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_86add36a6de1fac27e9318d620b4641d2faf4a9255d805c38ce04e95644cbe98",
                                "typeString": "literal_string \"Withdraw: NONZERO_RECIPIENT_BALANCE\""
                              }
                            ],
                            "id": 6204,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1776:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1776:70:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6213,
                        "nodeType": "ExpressionStatement",
                        "src": "1776:70:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 6229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 6221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 6215,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6187,
                                    "src": "1877:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                      "typeString": "struct Withdraw.TransferState memory"
                                    }
                                  },
                                  "id": 6216,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "initiator",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6124,
                                  "src": "1877:15:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 6219,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1904:1:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 6218,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1896:7:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 6217,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1896:7:47",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 6220,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1896:10:47",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "1877:29:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 6228,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 6222,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6187,
                                    "src": "1910:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                      "typeString": "struct Withdraw.TransferState memory"
                                    }
                                  },
                                  "id": 6223,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "responder",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6126,
                                  "src": "1910:15:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 6226,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1937:1:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 6225,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1929:7:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 6224,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1929:7:47",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 6227,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1929:10:47",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "1910:29:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1877:62:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57697468647261773a20454d5054595f5349474e455253",
                              "id": 6230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1953:25:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_43019b466768e4ca0d74e83803bde9a9e712a1f0347a45085a8a9e6cad777f11",
                                "typeString": "literal_string \"Withdraw: EMPTY_SIGNERS\""
                              },
                              "value": "Withdraw: EMPTY_SIGNERS"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_43019b466768e4ca0d74e83803bde9a9e712a1f0347a45085a8a9e6cad777f11",
                                "typeString": "literal_string \"Withdraw: EMPTY_SIGNERS\""
                              }
                            ],
                            "id": 6214,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1856:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1856:132:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6232,
                        "nodeType": "ExpressionStatement",
                        "src": "1856:132:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 6240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 6234,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6187,
                                  "src": "2006:5:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                    "typeString": "struct Withdraw.TransferState memory"
                                  }
                                },
                                "id": 6235,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "data",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6128,
                                "src": "2006:10:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 6238,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2028:1:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6237,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2020:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": {
                                    "id": 6236,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2020:7:47",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6239,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2020:10:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "2006:24:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57697468647261773a20454d5054595f44415441",
                              "id": 6241,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2032:22:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9432639309a5e9ed4494ef2dfaf88afe31c2346aeff62a2e70ba89efea8029d6",
                                "typeString": "literal_string \"Withdraw: EMPTY_DATA\""
                              },
                              "value": "Withdraw: EMPTY_DATA"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9432639309a5e9ed4494ef2dfaf88afe31c2346aeff62a2e70ba89efea8029d6",
                                "typeString": "literal_string \"Withdraw: EMPTY_DATA\""
                              }
                            ],
                            "id": 6233,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1998:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1998:57:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6243,
                        "nodeType": "ExpressionStatement",
                        "src": "1998:57:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 6245,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6187,
                                  "src": "2073:5:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                    "typeString": "struct Withdraw.TransferState memory"
                                  }
                                },
                                "id": 6246,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "nonce",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6130,
                                "src": "2073:11:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 6249,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2096:1:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2088:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6247,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2088:7:47",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6250,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2088:10:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2073:25:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57697468647261773a20454d5054595f4e4f4e4345",
                              "id": 6252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2100:23:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_aa591aa03bf36e7a317631faf971e7aee8594e590ef52a279f318fc3af564532",
                                "typeString": "literal_string \"Withdraw: EMPTY_NONCE\""
                              },
                              "value": "Withdraw: EMPTY_NONCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_aa591aa03bf36e7a317631faf971e7aee8594e590ef52a279f318fc3af564532",
                                "typeString": "literal_string \"Withdraw: EMPTY_NONCE\""
                              }
                            ],
                            "id": 6244,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2065:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2065:59:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6254,
                        "nodeType": "ExpressionStatement",
                        "src": "2065:59:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 6256,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6187,
                                  "src": "2155:5:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                    "typeString": "struct Withdraw.TransferState memory"
                                  }
                                },
                                "id": 6257,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "fee",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6132,
                                "src": "2155:9:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "baseExpression": {
                                  "expression": {
                                    "id": 6258,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6196,
                                    "src": "2168:7:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                      "typeString": "struct Balance memory"
                                    }
                                  },
                                  "id": 6259,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4018,
                                  "src": "2168:14:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                    "typeString": "uint256[2] memory"
                                  }
                                },
                                "id": 6261,
                                "indexExpression": {
                                  "hexValue": "30",
                                  "id": 6260,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2183:1:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2168:17:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2155:30:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57697468647261773a20494e53554646494349454e545f42414c414e4345",
                              "id": 6263,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2199:32:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7ffcce6129e3df3c1651787db3ab2f87f9517ec57074caaf7867c0e3f9587d76",
                                "typeString": "literal_string \"Withdraw: INSUFFICIENT_BALANCE\""
                              },
                              "value": "Withdraw: INSUFFICIENT_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7ffcce6129e3df3c1651787db3ab2f87f9517ec57074caaf7867c0e3f9587d76",
                                "typeString": "literal_string \"Withdraw: INSUFFICIENT_BALANCE\""
                              }
                            ],
                            "id": 6255,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2134:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2134:107:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6265,
                        "nodeType": "ExpressionStatement",
                        "src": "2134:107:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 6270,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6187,
                                    "src": "2315:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                      "typeString": "struct Withdraw.TransferState memory"
                                    }
                                  },
                                  "id": 6271,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "initiatorSignature",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6122,
                                  "src": "2315:24:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 6272,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6187,
                                    "src": "2357:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                      "typeString": "struct Withdraw.TransferState memory"
                                    }
                                  },
                                  "id": 6273,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "initiator",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6124,
                                  "src": "2357:15:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "expression": {
                                    "id": 6267,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6187,
                                    "src": "2272:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                      "typeString": "struct Withdraw.TransferState memory"
                                    }
                                  },
                                  "id": 6268,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "data",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6128,
                                  "src": "2272:10:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 6269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "checkSignature",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4187,
                                "src": "2272:25:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                }
                              },
                              "id": 6274,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2272:114:47",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "57697468647261773a20494e56414c49445f494e49544941544f525f534947",
                              "id": 6275,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2400:33:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_54e716308ae1c103a106f112b23df687f8018bdeb114d94ab17fc47be976030a",
                                "typeString": "literal_string \"Withdraw: INVALID_INITIATOR_SIG\""
                              },
                              "value": "Withdraw: INVALID_INITIATOR_SIG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_54e716308ae1c103a106f112b23df687f8018bdeb114d94ab17fc47be976030a",
                                "typeString": "literal_string \"Withdraw: INVALID_INITIATOR_SIG\""
                              }
                            ],
                            "id": 6266,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2251:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2251:192:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6277,
                        "nodeType": "ExpressionStatement",
                        "src": "2251:192:47"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 6278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2509:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6185,
                        "id": 6279,
                        "nodeType": "Return",
                        "src": "2502:11:47"
                      }
                    ]
                  },
                  "functionSelector": "94184ba9",
                  "id": 6281,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "create",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6182,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1540:8:47"
                  },
                  "parameters": {
                    "id": 6181,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6178,
                        "mutability": "mutable",
                        "name": "encodedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 6281,
                        "src": "1442:29:47",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6177,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1442:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6180,
                        "mutability": "mutable",
                        "name": "encodedState",
                        "nodeType": "VariableDeclaration",
                        "scope": 6281,
                        "src": "1473:27:47",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6179,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1473:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1441:60:47"
                  },
                  "returnParameters": {
                    "id": 6185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6184,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6281,
                        "src": "1566:4:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6183,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1566:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1565:6:47"
                  },
                  "scope": 6371,
                  "src": "1426:1094:47",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3927
                  ],
                  "body": {
                    "id": 6369,
                    "nodeType": "Block",
                    "src": "2713:1159:47",
                    "statements": [
                      {
                        "assignments": [
                          6294
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6294,
                            "mutability": "mutable",
                            "name": "state",
                            "nodeType": "VariableDeclaration",
                            "scope": 6369,
                            "src": "2723:26:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                              "typeString": "struct Withdraw.TransferState"
                            },
                            "typeName": {
                              "id": 6293,
                              "name": "TransferState",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 6137,
                              "src": "2723:13:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferState_$6137_storage_ptr",
                                "typeString": "struct Withdraw.TransferState"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6301,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6297,
                              "name": "encodedState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6285,
                              "src": "2763:12:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6298,
                                  "name": "TransferState",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6137,
                                  "src": "2778:13:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_TransferState_$6137_storage_ptr_$",
                                    "typeString": "type(struct Withdraw.TransferState storage pointer)"
                                  }
                                }
                              ],
                              "id": 6299,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2777:15:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$6137_storage_ptr_$",
                                "typeString": "type(struct Withdraw.TransferState storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_TransferState_$6137_storage_ptr_$",
                                "typeString": "type(struct Withdraw.TransferState storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6295,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2752:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2752:10:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2752:41:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                            "typeString": "struct Withdraw.TransferState memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2723:70:47"
                      },
                      {
                        "assignments": [
                          6303
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6303,
                            "mutability": "mutable",
                            "name": "resolver",
                            "nodeType": "VariableDeclaration",
                            "scope": 6369,
                            "src": "2803:32:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                              "typeString": "struct Withdraw.TransferResolver"
                            },
                            "typeName": {
                              "id": 6302,
                              "name": "TransferResolver",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 6140,
                              "src": "2803:16:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TransferResolver_$6140_storage_ptr",
                                "typeString": "struct Withdraw.TransferResolver"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6310,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6306,
                              "name": "encodedResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6287,
                              "src": "2861:15:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6307,
                                  "name": "TransferResolver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6140,
                                  "src": "2879:16:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_TransferResolver_$6140_storage_ptr_$",
                                    "typeString": "type(struct Withdraw.TransferResolver storage pointer)"
                                  }
                                }
                              ],
                              "id": 6308,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2878:18:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_TransferResolver_$6140_storage_ptr_$",
                                "typeString": "type(struct Withdraw.TransferResolver storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_TransferResolver_$6140_storage_ptr_$",
                                "typeString": "type(struct Withdraw.TransferResolver storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6304,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2850:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2850:10:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2850:47:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                            "typeString": "struct Withdraw.TransferResolver memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2803:94:47"
                      },
                      {
                        "assignments": [
                          6312
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6312,
                            "mutability": "mutable",
                            "name": "balance",
                            "nodeType": "VariableDeclaration",
                            "scope": 6369,
                            "src": "2907:22:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                              "typeString": "struct Balance"
                            },
                            "typeName": {
                              "id": 6311,
                              "name": "Balance",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4023,
                              "src": "2907:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                                "typeString": "struct Balance"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6319,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6315,
                              "name": "encodedBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6283,
                              "src": "2943:14:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6316,
                                  "name": "Balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4023,
                                  "src": "2960:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                    "typeString": "type(struct Balance storage pointer)"
                                  }
                                }
                              ],
                              "id": 6317,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2959:9:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_Balance_$4023_storage_ptr_$",
                                "typeString": "type(struct Balance storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6313,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2932:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2932:10:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2932:37:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                            "typeString": "struct Balance memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2907:62:47"
                      },
                      {
                        "assignments": [
                          6321
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6321,
                            "mutability": "mutable",
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 6369,
                            "src": "3157:14:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 6320,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3157:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6326,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "3635",
                              "id": 6324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3184:2:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              },
                              "value": "65"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              }
                            ],
                            "id": 6323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "3174:9:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 6322,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3178:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 6325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3174:13:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3157:30:47"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 6334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 6328,
                                  "name": "resolver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6303,
                                  "src": "3211:8:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                                    "typeString": "struct Withdraw.TransferResolver memory"
                                  }
                                },
                                "id": 6329,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "responderSignature",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6139,
                                "src": "3211:27:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 6327,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "3201:9:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 6330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3201:38:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 6332,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6321,
                                "src": "3253:1:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 6331,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "3243:9:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 6333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3243:12:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3201:54:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6365,
                          "nodeType": "Block",
                          "src": "3348:493:47",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 6340,
                                          "name": "resolver",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6303,
                                          "src": "3434:8:47",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TransferResolver_$6140_memory_ptr",
                                            "typeString": "struct Withdraw.TransferResolver memory"
                                          }
                                        },
                                        "id": 6341,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "responderSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6139,
                                        "src": "3434:27:47",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 6342,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "3483:5:47",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                            "typeString": "struct Withdraw.TransferState memory"
                                          }
                                        },
                                        "id": 6343,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "responder",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6126,
                                        "src": "3483:15:47",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "expression": {
                                          "id": 6337,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6294,
                                          "src": "3387:5:47",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                            "typeString": "struct Withdraw.TransferState memory"
                                          }
                                        },
                                        "id": 6338,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "data",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6128,
                                        "src": "3387:10:47",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "id": 6339,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "checkSignature",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4187,
                                      "src": "3387:25:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_bytes32_$",
                                        "typeString": "function (bytes32,bytes memory,address) pure returns (bool)"
                                      }
                                    },
                                    "id": 6344,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3387:129:47",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "57697468647261773a20494e56414c49445f524553504f4e4445525f534947",
                                    "id": 6345,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3534:33:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_ee51f23f7e66688e04fc7d564ab0bf3afee34f7f47cda511b05085ef379484c2",
                                      "typeString": "literal_string \"Withdraw: INVALID_RESPONDER_SIG\""
                                    },
                                    "value": "Withdraw: INVALID_RESPONDER_SIG"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_ee51f23f7e66688e04fc7d564ab0bf3afee34f7f47cda511b05085ef379484c2",
                                      "typeString": "literal_string \"Withdraw: INVALID_RESPONDER_SIG\""
                                    }
                                  ],
                                  "id": 6336,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "3362:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 6346,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3362:219:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6347,
                              "nodeType": "ExpressionStatement",
                              "src": "3362:219:47"
                            },
                            {
                              "expression": {
                                "id": 6355,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 6348,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6312,
                                      "src": "3766:7:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 6351,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4018,
                                    "src": "3766:14:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                      "typeString": "uint256[2] memory"
                                    }
                                  },
                                  "id": 6352,
                                  "indexExpression": {
                                    "hexValue": "31",
                                    "id": 6350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3781:1:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3766:17:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 6353,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6294,
                                    "src": "3786:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TransferState_$6137_memory_ptr",
                                      "typeString": "struct Withdraw.TransferState memory"
                                    }
                                  },
                                  "id": 6354,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "fee",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6132,
                                  "src": "3786:9:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3766:29:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6356,
                              "nodeType": "ExpressionStatement",
                              "src": "3766:29:47"
                            },
                            {
                              "expression": {
                                "id": 6363,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 6357,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6312,
                                      "src": "3809:7:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                                        "typeString": "struct Balance memory"
                                      }
                                    },
                                    "id": 6360,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4018,
                                    "src": "3809:14:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                                      "typeString": "uint256[2] memory"
                                    }
                                  },
                                  "id": 6361,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 6359,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3824:1:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3809:17:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "30",
                                  "id": 6362,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3829:1:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3809:21:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6364,
                              "nodeType": "ExpressionStatement",
                              "src": "3809:21:47"
                            }
                          ]
                        },
                        "id": 6366,
                        "nodeType": "IfStatement",
                        "src": "3197:644:47",
                        "trueBody": {
                          "id": 6335,
                          "nodeType": "Block",
                          "src": "3257:85:47",
                          "statements": []
                        }
                      },
                      {
                        "expression": {
                          "id": 6367,
                          "name": "balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6312,
                          "src": "3858:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                            "typeString": "struct Balance memory"
                          }
                        },
                        "functionReturnParameters": 6292,
                        "id": 6368,
                        "nodeType": "Return",
                        "src": "3851:14:47"
                      }
                    ]
                  },
                  "functionSelector": "8ef98a7e",
                  "id": 6370,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resolve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6289,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2679:8:47"
                  },
                  "parameters": {
                    "id": 6288,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6283,
                        "mutability": "mutable",
                        "name": "encodedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 6370,
                        "src": "2552:29:47",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6282,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2552:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6285,
                        "mutability": "mutable",
                        "name": "encodedState",
                        "nodeType": "VariableDeclaration",
                        "scope": 6370,
                        "src": "2591:27:47",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6284,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2591:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6287,
                        "mutability": "mutable",
                        "name": "encodedResolver",
                        "nodeType": "VariableDeclaration",
                        "scope": 6370,
                        "src": "2628:30:47",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6286,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2628:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2542:122:47"
                  },
                  "returnParameters": {
                    "id": 6292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6291,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6370,
                        "src": "2697:14:47",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Balance_$4023_memory_ptr",
                          "typeString": "struct Balance"
                        },
                        "typeName": {
                          "id": 6290,
                          "name": "Balance",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 4023,
                          "src": "2697:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Balance_$4023_storage_ptr",
                            "typeString": "struct Balance"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2696:16:47"
                  },
                  "scope": 6371,
                  "src": "2526:1346:47",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6372,
              "src": "363:3511:47"
            }
          ],
          "src": "39:3836:47"
        },
        "id": 47
      }
    }
  }
}
